誰かが AutoResetEvent.Reset() メソッドのユースケースを紹介できますか? いつ、なぜこの方法を使用したいのですか? WaitOne と Set は理解できますが、これは私にはよくわかりません。
6 に答える
はい、AutoResetEvent
イベントを待機しているスレッドが通知されるたびに、その状態が自動的にリセットされます。ただし、特定のイベントが無効になり、最初に設定されてからスレッドが待機していない可能性がありますAutoResetEvent
。そのシナリオでは、Reset
メソッドが役立ちます
EventWaitHandleから継承されたようです。おそらく、そのクラスから継承する ManualResetEvent の方が便利でしょうか?
このメソッドは基本クラスから継承され、を「ブロックされた」状態EventWaitHandle
に (再) 設定するために使用されます。AutoResetEvent
はシグナルされるとすぐに自動的にその状態になるためAutoResetEvent
、通常、このメソッドがコードで使用されることはありませんが、それから派生する他のクラスEventWaitHandle
でははるかに便利です!
AutoResetEvent プロデューサーがイベントをクリアしたい場合は、Reset() を使用します。このようにして、イベントが現在通知されているかどうかを知らなくても、イベントを安全に「リセット」できます。プロデューサが WaitOne を使用してそれ自身のイベントを「リセット」した場合、デッドロックのリスクがあります (つまり、イベントが通知されず、プロデューサ スレッドがブロックされているため、戻らない)。
スレッドがシグナル状態になると AutoResetEvent が自身をリセットするため、Reset() を使用する場合は ManualResetEvent を使用する必要があります。