Эти два образца одинаковы? Можно ли заменить старый стиль на Invoke и null?Потоковая безопасность сбора событий с нулевым распространением
OLD:
public event EventHandler<MyEventArgs> MyEvent;
protected virtual void OnMyEvent(MyEventArgs args)
{
EventHandler<MyEventArgs> handler = this.MyEvent;
if (handler != null)
handler(this, args);
}
NEW:
public event EventHandler<MyEventArgs> MyEvent;
protected virtual void OnMyEvent(MyEventArgs args)
{
this.MyEvent?.Invoke(this, args);
}
Null проверка важна, но это понятно. Что такое дополнительная переменная?
Как работает нуль-propogation внутри? Это поточно-безопасный с событиями?
P.S. Что касается безопасности потока в событиях вы можете прочитать здесь:
C# Events and Thread Safety
См. Также: https://codeblog.jonskeet.uk/2015/01/30/clean-event-handlers-invocation-with-c-6/ – VMAtm
Также ссылки по-русски: https://habrahabr.ru/ post/89529/и https://habrahabr.ru/post/240385/ – VMAtm
Это не дубликат .. по крайней мере, проблема потоковой безопасности - это конкретная тема в этом вопросе .. и в предыдущем сообщении ответ говорит о чем-то странном "компилятор генерирует код для оценивать PropertyChanged только один раз, сохраняя результат во временной переменной ".. Он ничего не делает для обеспечения безопасности потоков. Только факт копирования - это вопрос! И это было исследовано на @eocron. Так что это имеет значение. Чтобы понять, что именно происходит, гораздо лучше получить ответ с этого поста, чем предыдущий. – Maxim