Condividi tramite


Handle di attesa

La classe WaitHandle incapsula gli handle di sincronizzazione Win32 e viene utilizzata per rappresentare tutti gli oggetti di sincronizzazione inclusi nell'ambiente di esecuzione che consentono più operazioni di attesa. Per un confronto tra gli handle di attesa e gli altri oggetti di sincronizzazione, vedere Cenni preliminari sulle primitive di sincronizzazione.

La classe WaitHandle è astratta. Oltre a classi derivate, dispone di una serie di metodi statici che consentono l'attesa di più eventi. Nelle classi derivate da WaitHandle sono incluse le seguenti:

Poiché la classe WaitHandle deriva da MarshalByRefObject, queste classi possono essere utilizzate per sincronizzare le attività dei thread oltre i limiti del dominio applicazione.

I thread possono bloccarsi su un singolo handle di attesa chiamando il metodo di istanza WaitOne. Inoltre, la classe WaitHandle dispone di metodi statici di overload che consentono di rimanere in attesa finché tutti gli handle di attesa di un insieme specificato non ricevono un segnale (WaitAll) oppure finché un qualsiasi handle di attesa di un insieme specificato non riceve un segnale (WaitAny). Gli overload di questi metodi forniscono intervalli di timeout per interrompere l'attesa, nonché la possibilità di uscire da un contesto di sincronizzazione, consentendone l'utilizzo da parte di altri thread, prima di entrare in stato di attesa.

In .NET Framework versione 2.0 gli handle di attesa dispongono anche del metodo statico SignalAndWait, che consente a un thread di inviare un segnale a un handle di attesa e di attenderne immediatamente un altro.

Le classi derivate di WaitHandle si differenziano in termini di affinità di thread. Gli handle di attesa degli eventi (EventWaitHandle, AutoResetEvent e ManualResetEvent) e i semafori non presentano affinità di thread. Qualsiasi thread può inviare un segnale a un handle di attesa degli eventi o a un semaforo. I mutex, d'altra parte, presentano affinità di thread. Il thread che possiede un mutex deve rilasciarlo. Se un thread chiama il metodo ReleaseMutex su un mutex di cui non è proprietario, viene generata un'eccezione.

Vedere anche

Concetti

Mutex

Semaphore e SemaphoreSlim

Altre risorse

Threading gestito

Oggetti e funzionalità del threading

EventWaitHandle, AutoResetEvent, CountdownEvent e ManualResetEvent

Cronologia delle modifiche

Data

Cronologia

Motivo

Aprile 2011

Correzione: il metodo WaitHandle.SignalAndWait non è atomico.

Commenti e suggerimenti dei clienti.