Monitor.Pulse/All
とMonitor.Wait
は便利なメソッドですが、それらを大量に使用すると (ダース単位でそれらを吐き出す DSL デザイナーがいます)、結果のコードが読めなくなるという苦情が寄せられています。どう思いますか?
3 に答える
実際に読まなければならないコード全体に散らばっている場合、それは問題になる可能性があります。そもそもなんでこんなに頻繁に出てくるの?機能は実際に別の場所にカプセル化できますか?
基本的に、Wait/Pulse に問題はありませんが、人生の他のすべてと同様に、不適切に使用すると問題が発生します。あなたの使い方が不適切かどうかは、コードを見ないとわかりません:(
PulseEvent の MSDN ページから:
同期オブジェクトを待機しているスレッドは、カーネル モードの APC によって待機状態から一時的に削除され、APC の完了後に待機状態に戻る可能性があります。スレッドが待機状態から削除されている間に PulseEvent への呼び出しが発生した場合、PulseEvent は呼び出された時点で待機しているスレッドのみを解放するため、スレッドは解放されません。したがって、PulseEvent は信頼性が低く、新しいアプリケーションでは使用しないでください。代わりに、条件変数を使用してください。
現在、Monitor.Pulse は PulseEvent 以外のものを使用して記述されている可能性がありますが、全体の概念にはかなり欠陥があります。ロックと条件変数を適切に使用してください。
アスペクトとしてインジェクションによってコード化されるべきもののように聞こえます。ただし、C# での AOP のサポートに関する私の知識はごくわずかであるため、それ以上のものを提供することはできません。