AutoResetEvent Сброс сразу после установки
Рассмотрим следующую схему:
private AutoResetEvent signal = new AutoResetEvent(false);
private void Work()
{
while (true)
{
Thread.Sleep(5000);
signal.Set();
//has a waiting thread definitely been signaled by now?
signal.Reset();
}
}
public void WaitForNextEvent()
{
signal.WaitOne();
}
Цель этого шаблона - позволить внешним потребителям ожидать определенного события (например, прибытие сообщения).WaitForNextEvent
не вызывается из класса.
Чтобы привести пример, который должен быть знаком, рассмотримSystem.Diagnostics.Process
, Это подвергаетExited
событие, но оно также подвергаетWaitForExit
метод, который позволяет вызывающей стороне синхронно ожидать завершения процесса. это то, что я пытаюсь достичь здесь.
Причина мне нужнаsignal.Reset()
это если поток вызываетWaitForNextEvent
после signal.Set()
уже был вызван (или, другими словами, если.Set
был вызван, когда ни один поток не ожидал), он немедленно возвращается, так как событие уже было сигнализировано ранее.
WaitForNextEvent()
будет сигнализироватьсядо signal.Reset()
называется? Если нет, то каковы другие решения для реализацииWaitFor
метод?