私は2009年からのこれらの質問を見ていました: C# Events and Thread Safety
同じトピックに関する Eric Lippert のブログ投稿も見ました 。
問題は要約すると、マルチスレッド環境では、別のスレッドがスレッド (スレッド A) の 'if' ステートメントと 'call delegate' ステートメントの間でデリゲートを登録解除する状況に遭遇することがあります。
私が読んでいたとき、この質問が頭に浮かびました:代替が競合状態またはスローされた例外のいずれかの選択であると思われる場合、それを try/catch ブロックでラップして、どちらも心配しないのはなぜですか? nullReferenceException をキャッチした場合は、catch ブロックでそれを無視して (単に例外を抑制するため)、先に進みます。
さて、Eric Lippert と John Skeet が C#、マルチスレッド、およびデリゲートについて少し知っていることは理解しています。