Controladores de espera
Actualización: noviembre 2007
La clase WaitHandle encapsula identificadores de sincronización de Win32 y se utiliza para representar todos los objetos de sincronización en el motor en tiempo de ejecución que permiten varias operaciones de espera. Para una comparación de los identificadores de espera con otros objetos de sincronización, vea Información general sobre los primitivos de sincronización.
La propia clase WaitHandle es abstracta. Además de las clases derivadas, tiene varios métodos estáticos que habilitan la espera de varios eventos. Las clases derivadas de WaitHandle incluyen lo siguiente:
Clase Mutex Vea Exclusiones mutuas (mutex).
La clase EventWaitHandle y sus clases derivadas, AutoResetEvent y ManualResetEvent. La clase EventWaitHandle es nueva en la versión 2.0 de .NET Framework. Vea EventWaitHandle, AutoResetEvent y ManualResetEvent.
La clase Semaphore es nueva en la versión 2.0 de .NET Framework. Vea Semáforos.
Dado que la clase WaitHandle deriva de MarshalByRefObject, estas clases se pueden utilizar para sincronizar las actividades de subprocesos que salen de los límites del dominio de aplicación.
Los subprocesos pueden bloquear en un identificador de espera individual llamando al método de instancia WaitOne. Además, la clase WaitHandle tiene métodos estáticos sobrecargados para esperar hasta que se hayan señalado todos los controladores de espera del conjunto especificado (WaitAll) o hasta que se haya señalado cualquiera de los identificadores de espera de un conjunto especificado (WaitAny). Las sobrecargas de estos métodos proporcionan intervalos de espera para salir del período de espera y la oportunidad de salir de un contexto de sincronización antes de entrar en la espera, permitiendo que otros subprocesos utilicen el contexto de sincronización.
En la versión 2.0 de .NET Framework, los indicadores de espera también tienen el método estático SignalAndWait, que permite que un subproceso señale un identificador de espera y espere inmediatamente a otro, como en una operación atómica.
Las clases derivadas de WaitHandle difieren en su afinidad de subprocesos. Los identificadores de espera de eventos (EventWaitHandle, AutoResetEvent y ManualResetEvent) y los semáforos no tienen afinidad de subprocesos. Cualquier subproceso puede señalar un identificador de espera de evento o un semáforo. Las exclusiones mutuas, por otro lado, sí tienen afinidad de subprocesos. El subproceso propietario de una exclusión mutua debe liberarlo; se produce una excepción si un subproceso llama al método ReleaseMutex en una expresión mutua que no le pertenece.