AutoResetEvent Reset natychmiast po ustawieniu

Rozważmy następujący wzór:

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();
}

Celem tego wzorca jest umożliwienie konsumentom zewnętrznym oczekiwania na określone zdarzenie (np. Nadejście wiadomości).WaitForNextEvent nie jest wywoływany z poziomu klasy.

Aby podać przykład, który powinien być znajomy, rozważSystem.Diagnostics.Process. ObnażaExited zdarzenie, ale także obnaża aWaitForExit metoda, która umożliwia dzwoniącemu synchroniczne oczekiwanie aż do zakończenia procesu. to jest to, co próbuję osiągnąć tutaj.

Powód, dla którego potrzebujęsignal.Reset() jest to, jeśli wątek wywołujeWaitForNextEvent po signal.Set() został już wywołany (lub innymi słowy, jeśli.Set został wywołany, gdy żaden wątek nie czekał), zwraca się natychmiast, ponieważ zdarzenie zostało już wcześniej zasygnalizowane.

PytanieCzy to gwarantuje, że wywołanie wątkuWaitForNextEvent() zostanie zasygnalizowanyprzed signal.Reset() jest nazywany? Jeśli nie, jakie są inne rozwiązania do implementacjiWaitFor metoda?

questionAnswers(4)

yourAnswerToTheQuestion