Очистка событий C # после выполнения? - PullRequest
5 голосов
/ 22 сентября 2011

Скажите, у меня есть следующий код:

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 {};

Это очистит подписчиков, заменив их новым пустым значением по умолчанию? И будет ли событие уведомлять всех подписчиков, прежде чем они будут очищены? И.Е. Есть ли шанс на состояние гонки?

Ответы [ 2 ]

7 голосов
/ 22 сентября 2011

Да, это прояснит.И поскольку события запускаются синхронно в одном и том же потоке, не должно быть состояния гонки.

Мой совет: если есть сомнения, напишите небольшое тестовое приложение и ... ну, протестируйте его. ОБНОВЛЕНИЕ: Я проверял это перед публикацией.(В ответ на минусы.)

0 голосов
/ 22 сентября 2011

До unsubscribe из события используйте event-=delegate, поэтому вы уверены, что ресурс свободен. Даже если по официальной документации Microsoft в этом нет необходимости, по моему опыту, особенно в крупномасштабном сложном проекте, источники ненужных событий являются источником утечек памяти. Так что unsubscribe из них явно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...