MSDNから「待機中のスレッドがない場合、スレッドが待機を試みるまで、またはそのReset
メソッドが呼び出されるまで、待機ハンドルは通知されたままになります。」
EventWaitHandle MyWaitHandle = new AutoResetEvent(false);
スレッド#1:
public void Method1()
{
//do something
//wait for the signal or timeout
MyWaitHandle.WaitOne(10000);
//do something else on receiving signal or after timeout
}
スレッド#2:
//this would be called when there is a response from the external app
public void Method2()
{
//do something
//send the signal to waiting thread
MyWaitHandle.Set();
}
私のアプリケーションでは、スレッド#1が外部アプリにリクエストを送信し、シグナルまたはタイムアウトを待機しています。外部アプリから応答を受信した場合、スレッド#2は待機ハンドルを設定します。これset
は、タイムアウト後でも呼び出すことができます。私の質問は
1)Method2
タイムアウト後に呼び出して、信号を設定できる可能性が高いです。それは、将来スレッド#1へのリクエストがあるときはいつでも、WaitOne(10000)
効果がなく、すぐにリリースされることを意味しますか?
2)タイムアウトの場合に電話をかけないようset
にする方法はありますか?Method2
それはスレッド#1に問題を引き起こしますか?