AutoResetEvent Set вызывается после истечения времени ожидания

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

1 ответ

Решение

Почему бы просто не убедиться, что дескриптор ожидания всегда сбрасывается, прежде чем ждать на нем?

public void Method1()
{
  // Reset the wait handle I'll be using...
  MyWaitHandle.Reset();

  //do something
  //wait for the signal or timeout
  MyWaitHandle.WaitOne(10000);
  //do something else on receiving signal or after timeout
}
Другие вопросы по тегам