说我有以下代码:
public event EventHandler DatabaseInitialized = delegate {};
//a intederminant amount of subscribers have subscribed to this event...
// sometime later fire the event, then create a new event handler...
DatabaseInitialized(null,EventArgs.Empty);
//THIS LINE IS IN QUESTION
DatabaseInitialized = delegate {};
这会清除订阅者,将其替换为新的空默认值吗?并且,该事件会在被清除之前通知所有订户吗? I.E.有竞争条件的机会吗?
答案 0 :(得分:7)
是的,它会清除它。并且因为事件在同一个线程中同步发生,所以不应该存在竞争条件。
我的建议:如有疑问,请写一个小型测试应用程序,然后......测试一下。
更新:我在发布之前对其进行了测试。 (回应弊端。)
答案 1 :(得分:0)
从活动中unsubscribe
使用event-=delegate
,因此您确定该资源是免费的。即使是通过官方的Microsoft文档,根据我自己的经验,特别是在大型复杂项目中,不必要的事件嫌疑人是内存泄漏的来源。所以明确地unsubscribe
来自他们。