Следующий фрагмент кода взят из книги Effective C #,
public event AddMessageEventHandler Log;
public void AddMsg ( int priority, string msg )
{
// This idiom discussed below.
AddMessageEventHandler l = Log;
if ( l != null )
l ( null, new LoggerEventArgs( priority, msg ) );
}
Метод AddMsg показывает правильный способ вызывать события. Временная переменная, ссылающаяся на обработчик событий журнала, является важной защитой от состояния гонки в
многопоточные программы. Без копии ссылки клиенты могут удалять обработчики событий между проверкой оператора if и выполнением обработчика событий. От
копирование ссылки, это не может произойти.
Почему временная переменная может помешать клиенту удалить обработчик событий? Должно быть, я что-то здесь упускаю.