0

Monitor.Pulse/AllMonitor.Waitは便利なメソッドですが、それらを大量に使用すると (ダース単位でそれらを吐き出す DSL デザイナーがいます)、結果のコードが読めなくなるという苦情が寄せられています。どう思いますか?

4

3 に答える 3

1

実際に読まなければならないコード全体に散らばっている場合、それは問題になる可能性があります。そもそもなんでこんなに頻繁に出てくるの?機能は実際に別の場所にカプセル化できますか?

基本的に、Wait/Pulse に問題はありませんが、人生の他のすべてと同様に、不適切に使用すると問題が発生します。あなたの使い方が不適切かどうかは、コードを見ないとわかりません:(

于 2008-12-11T17:10:57.407 に答える
0

PulseEvent の MSDN ページから:

同期オブジェクトを待機しているスレッドは、カーネル モードの APC によって待機状態から一時的に削除され、APC の完了後に待機状態に戻る可能性があります。スレッドが待機状態から削除されている間に PulseEvent への呼び出しが発生した場合、PulseEvent は呼び出された時点で待機しているスレッドのみを解放するため、スレッドは解放されません。したがって、PulseEvent は信頼性が低く、新しいアプリケーションでは使用しないでください。代わりに、条件変数を使用してください。

現在、Monitor.Pulse は PulseEvent 以外のものを使用して記述されている可能性がありますが、全体の概念にはかなり欠陥があります。ロックと条件変数を適切に使用してください。

于 2008-12-11T17:25:21.277 に答える
-1

アスペクトとしてインジェクションによってコード化されるべきもののように聞こえます。ただし、C# での AOP のサポートに関する私の知識はごくわずかであるため、それ以上のものを提供することはできません。

于 2008-12-11T17:19:15.707 に答える