alm*_*ori 0 asp.net static multithreading event-handling
任何人都可以向我解释当声明静态事件处理程序的类的实例将引用其他已注册意图的事件处理程序的类时,正在发生的事情,因为它们都是静态的,用户会话之间会有任何争用(我指的是他/她在asp.net中使用系统的时间点
下面是一个例子,摘自BlogEngine.Net
Post.Saved += new EventHandler<SavedEventArgs>(Post_Saved);
Run Code Online (Sandbox Code Playgroud)
保存对于类帖子是静态的,此事件在整个节目中被消耗,另一个用户的会话是否会看到保存的事件,因为它是静态的?在声明静态事件时我应该注意哪些线程问题?
当为事件注册多个事件处理程序时,它们(据我所知)按顺序运行(按照它们附加的顺序),而不是同时运行.所以不应该有任何并发问题.
如果事件是静态的,那么所有用户会话都将看到它,因为它们在同一个.NET AppDomain中运行.(我认为"会话"是指ASP.NET会话.)
注意静态事件的主要问题是内存泄漏.如果您的事件处理程序是一个实例方法,并且您将它附加到静态事件,那么该静态事件现在具有对声明处理程序的对象的引用,因此该对象及其引用的任何内容将保留在内存中,直到事件处理程序为止.是分离的,或卸载运行代码的整个AppDomain.因此,您必须小心在不再需要时分离事件处理程序,或者至少确保您的事件处理类不引用任何其他内容,因此内存泄漏很少.