EventWaitHandle, AutoResetEvent, CountdownEvent und ManualResetEvent
Threads können mithilfe von Wait-Handles für ein Ereignis Aktivitäten synchronisieren, indem sie einander Signale senden und auf die Signale der anderen Threads warten. Diese Synchronisierungsereignisse beruhen auf Win32-Wait-Handles und untergliedern sich in zwei Typen: Ereignisse, die sich nach der Signalisierung automatisch zurücksetzen und Ereignisse, die manuell zurückgesetzt werden müssen.
Wait-Handles für ein Ereignis sind in vielen Synchronisierungsszenarien nützlich, in denen auch die Monitor-Klasse eingesetzt wird. Wait-Handles für ein Ereignis können oft einfacher verwendet werden als die Monitor.Wait-Methode und die Monitor.Pulse-Methode und ermöglichen zudem eine bessere Steuerung der Signalisierungsvorgänge. Mit benannten Wait-Handles für ein Ereignis können Aktivitäten auch über Anwendungsdomänen und Prozesse hinweg synchronisiert werden, während Monitore nur lokal innerhalb einer Anwendungsdomäne eingesetzt werden können.
In diesem Abschnitt
EventWaitHandle
Die EventWaitHandle-Klasse kann entweder automatische oder manuelle Zurücksetzungsereignisse sowie entweder lokale Ereignisse oder benannte Systemereignisse darstellen.AutoResetEvent
Die AutoResetEvent-Klasse ist von EventWaitHandle abgeleitet und stellt ein lokales Ereignis dar, das sich automatisch zurücksetzt.ManualResetEvent und ManualResetEventSlim
Die ManualResetEvent-Klasse ist von EventWaitHandle abgeleitet und stellt ein lokales Ereignis dar, das manuell zurückgesetzt werden muss. Die ManualResetEventSlim-Klasse ist eine einfache, schnellere Version, die für Ereignisse innerhalb des gleichen Prozesses verwendet werden kann.CountdownEvent
Die CountdownEvent-Klasse bietet eine vereinfachte Möglichkeit zum Implementieren von Verzweigung/Join-Parallelismusmustern in Code, in dem Wait-Handle verwendet werden.
Verwandte Abschnitte
- Wait-Handles
Die WaitHandle-Klasse ist die Basisklasse für die Klassen EventWaitHandle, Semaphore und Mutex. Sie enthält statische Methoden wie SignalAndWait und WaitAll, die für die Verwendung von den verschiedenen Wait-Handles nützlich sind.