これらの2つのサンプルは同じですか?古いスタイルのレイジングをInvokeとnull propagationに置き換えることはできますか?ヌル伝播によるイベント発生のスレッドセーフ
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);
}
ヌルチェックは重要ですが、それは明らかです。追加の変数は何ですか?
ヌルプロパゲーションは内部的にどのように機能しますか?イベントではスレッドセーフですか?
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