c#イベント、スレッドの安全性、および先制コピーの神話
マルチスレッドシナリオでC#イベントを処理するための一般的でありながら欠陥のあるアプローチには、アクセスして発射する前にイベントデリゲートのコピーを作成することが含まれます。 想定される利点は、イベントハンドラーが同時に削除された場合のNullReferenceException
エラーを防ぐことです。 ただし、しばしば「貨物カルトプログラミング」とラベル付けされているこの慣行は、ほとんど効果がなく、深刻な人種条件さえ隠すことさえできます。
しかし、より大きな脅威は人種そのものです。 非ヌルのコピーがあっても、マルチスレッドの非同期性のために、代表者は最新の状態を反映していない可能性があります。 Eric Lippertは、堅牢なイベントハンドラーは、サブスクリプションを解除した後でも正しく機能する必要があることを強調しています。 ヌルチェックに盲目的に依存すると、これらの人種条件を隠し、予測不可能な行動につながる可能性があります。
?.
結論として、先制コピー方法は、真のスレッドの安全性を提供せずに複雑さを追加します。 マルチスレッド環境でイベントを効果的に処理するためには、堅牢な同期メカニズム(ロックなど)が不可欠です。 これは、単純なコピー/チェックアプローチを超えており、並行性制御のより包括的な理解が必要です。
以上が起動前にイベントをコピーすると、C# のスレッド セーフティの問題は防止されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。