リンゴとオレンジを比較しています。 RWFSOには待機ハンドルが必要です。 AutoResetEventと同様です。 RWFSOが行うことは、がイベントのためにを待つことを最適化することです。それがなければ、イベントのWaitXxx()メソッドを呼び出す必要があります。
イベントを設定するまで、WaitOne()はスレッドをブロックします。ブロックされたTPスレッドは他のスケジュールされたTPスレッドがすぐに実行されないため、これはスレッドプールスレッドでは避けたいものです。スレッドプールマネージャは、実行中のTPスレッドの数を最適化して、CPUコアよりも実行中のTPスレッドがないようにします。ブロッキングスレッドは、それをねじにしてしまいます。マネージャは、スレッドがなぜブロックしているのかを知るのに十分スマートではありません。ブロッキングTPスレッドが半秒間進まない場合にのみ、マネージャーは別の待機TPスレッドの実行を許可します。
RWFSOはかなりいいですが、必ずしも適切ではありません。それを使ったプログラミングは、特に例外を処理したい場合には、かなり厄介です。あなたがそれをキャンセルする必要があるならば、厄介な暗黙のレースがあります。イベントが通知されたときに実行されるTPスレッドは、同じ種類のTPスケジューリング遅延の影響を受けます。また、RegisterWaitForMultipleObjects()もなく、スレッドでWaitAny()を使用する必要があることがよくあります。直観的には、スレッドに何か準備ができていることを通知するイベントが1つあり、終了するようにスレッドに指示する別のイベントです。