Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

Método Monitor.Wait (Object)

 

Publicado: octubre de 2016

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo.

Espacio de nombres:   System.Threading
Ensamblado:  mscorlib (en mscorlib.dll)

public static bool Wait(
	object obj
)

Parámetros

obj
Type: System.Object

Objeto en el que se va a esperar.

Valor devuelto

Type: System.Boolean

Es true si la llamada fue devuelta porque el llamador volvió a adquirir el bloqueo para el objeto especificado. Este método no devuelve ningún resultado si el bloqueo no vuelve a adquirirse.

Exception Condition
ArgumentNullException

El parámetro obj es null.

SynchronizationLockException

El subproceso de llamada no posee el bloqueo para el objeto especificado.

ThreadInterruptedException

El subproceso que invoca Wait se interrumpe más adelante desde el estado de espera. Esto ocurre cuando otro subproceso llame a este subproceso Interrupt método.

El subproceso que actualmente posee el bloqueo en el objeto especificado invoca a este método para liberar el objeto para que otro subproceso puede obtener acceso a él. El autor de la llamada se bloquea mientras espera a adquirir el bloqueo. Se llama a este método cuando el llamador tiene que esperar un cambio de estado que se producirá como resultado de operaciones de otro subproceso.

Cuando un subproceso llama Wait, libera el bloqueo en el objeto y entra en cola de espera del objeto. El siguiente subproceso de cola de subprocesos listos del objeto (si hay alguno) adquiere el bloqueo y tiene uso exclusivo del objeto. Todos los subprocesos que llaman a Wait permanecen en la cola de espera hasta que reciben una señal de Pulse o PulseAll, enviada por el propietario del bloqueo. Si Pulse se envía, sólo el subproceso en el encabezado de la cola de espera se ve afectado. Si PulseAll se envía, se ven afectados todos los subprocesos que están esperando el objeto. Cuando se recibe la señal, uno o más subprocesos deja la cola de espera y especifique la cola de subprocesos listos. Se permite un subproceso en la cola de subprocesos listos para volver a adquirir el bloqueo.

Este método se devuelve cuando el subproceso de llamada vuelve a adquirir el bloqueo en el objeto. Tenga en cuenta que este método se bloquea indefinidamente si el propietario del bloqueo no llama a Pulse o PulseAll.

El llamador ejecuta Wait una vez, independientemente del número de veces que Enter se ha invocado para el objeto especificado. Conceptualmente, el Wait método almacena el número de veces que el llamador ha invocado Enter en el objeto e invoca Exit tantas veces como sea necesario para liberar completamente el objeto bloqueado. El llamador, a continuación, se bloquea mientras espera para adquirir el objeto. Cuando el llamador vuelve a adquirir el bloqueo, el sistema llama Enter tantas veces como sea necesario para restaurar el guardado Enter recuento para el llamador. Llamar a Wait libera el bloqueo para el objeto especificado; si el llamador es el propietario de los bloqueos sobre otros objetos, estos bloqueos no se liberan.

Tenga en cuenta que un objeto sincronizado contiene varias referencias, incluida una referencia al subproceso que actualmente posee el bloqueo, una referencia a la cola de subprocesos listos, que contiene los subprocesos que están listos para obtener el bloqueo, y una referencia a la cola de espera, que contiene los subprocesos que están esperando la notificación de un cambio en el estado del objeto.

El Pulse, PulseAll, y Wait métodos deben invocarse desde dentro de un bloque de código sincronizado.

La sección Comentarios para el Pulse método explica qué ocurre si Pulse se llama cuando no hay ningún subproceso en espera.

Plataforma universal de Windows
Disponible desde 8
.NET Framework
Disponible desde 1.1
Biblioteca de clases portable
Se admite en: plataformas portátiles de .NET
Silverlight
Disponible desde 2.0
Windows Phone Silverlight
Disponible desde 7.0
Windows Phone
Disponible desde 8.1
Volver al principio
Mostrar: