.NET(C#)のマルチスレッドサーバー内に "instrumentation"を作成しています。イベントに影響を与えずにAutoResetEventの値を確認してください。
これは、値を変更するために心配することなく、.NET ManualResetEvent
の値をチェックするために、かなり簡単です:
aManualResetEvent.WaitOne(0);
は、イベントに待たずにブール値を返します。
しかし、私はAutoResetEvent
から同じ情報を得ることに迷っているようです。 set
イベントでanAutoResetEvent.WaitOne(0)
を呼び出すと、(定義によって)戻っている間にイベントがリセットされます。
私はこの時点で決定することができます最良のオプションは、ManualResetEvent
にAutoResetEvent
を変更し、手動で実際にイベントをテストするときにリセットすることです:
ManualResetEvent theEventFormerlyKnownAsAutoResetEvent;
...
// Using the event:
if (theEventFormerlyKnownAsAutoResetEvent.WaitOne(timeout)
{
theEventFormerlyKnownAsAutoResetEvent.Reset();
...
}
...
// Instrumentation to get event state (shouldn't change anything):
bool eventIsSet = theEventFormerlyKnownAsAutoResetEvent.WaitOne(0);
// Update instrumentation
はAutoResetEvent
の状態を確認する良い方法はありますか?可能であれば、AutoResetEvent
の固有の原子性を好むでしょう。
それはあなたがそれをチェックした直後に他の誰かがイベントをクリアするかもしれないので、役に立たないでしょう。 – SLaks
あなたはあなたがもうそこにいないかもしれない何かを見ているので、その推論では、視力は役に立たない。 –
はい、ここでの全体の点は原子性です。 – SLaks