Из 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?