這2個樣本是否相同?可以將舊樣式提升替換爲Invoke和空傳播嗎?事件引發空傳播的線程安全
OLD:
public event EventHandler<MyEventArgs> MyEvent;
protected virtual void OnMyEvent(MyEventArgs args)
{
EventHandler<MyEventArgs> handler = this.MyEvent;
if (handler != null)
handler(this, args);
}
新:
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/後/ 89529 /和https://habrahabr.ru/post/240385/ – VMAtm
這是不重複..至少線程安全是在這個問題的具體主題..並在以前的帖子回答說一些奇怪的「編譯器生成代碼只評估PropertyChanged一次,將結果保存在臨時變量中「..它對線程安全沒有任何幫助。只有複製纔是事實!這是由@eocron調查的。所以它有所不同。要理解究竟發生了什麼,從這篇文章中得到答案比上一篇更好。 – Maxim