Зачем мне здесь нужна локальная копия мероприятия (цель myEvent
)?
public event EventHandler MyEvent = delegate {};
protected OnMyEvent()
{
var myEvent = MyEvent;
myEvent(this, EventArgs.Empty);
}
Имхо, это функционально похоже на
protected OnMyEvent() => MyEvent(this, EventArgs.Empty)
Но мне сказали, что локальная копия необходима. И это полностью взрывает мой разум.
Я согласен, что локальная копия обязательна в следующем сценарии:
public event EventHandler MyEvent;
protected OnMyEvent()
{
var myEvent = MyEvent;
if(myEvent != null)
myEvent(this, EventArgs.Empty);
}
Потому что между null
проверкой и вызовом какой-то другой поток может отписаться и если это был последний подписчик, то мы получим NullReferenceException
.