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 метод?

Ответы на вопрос(4)

Ваш ответ на вопрос