Compartir a través de


Monitor.Wait Método

Definición

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

Sobrecargas

Wait(Object, Int32, Boolean)

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. Este método también especifica si el dominio de sincronización del contexto (si se trata de un contexto sincronizado) sale antes de la espera y vuelve a adquirir el bloqueo después.

Wait(Object)

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

Wait(Object, Int32)

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.

Wait(Object, TimeSpan)

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.

Wait(Object, TimeSpan, Boolean)

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. De modo opcional, sale del dominio de sincronización del contexto sincronizado antes de la espera y vuelve a adquirir el dominio después.

Wait(Object, Int32, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. Este método también especifica si el dominio de sincronización del contexto (si se trata de un contexto sincronizado) sale antes de la espera y vuelve a adquirir el bloqueo después.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean

Parámetros

obj
Object

Objeto en el que se va a esperar.

millisecondsTimeout
Int32

Número de milisegundos que se va a estar a la espera antes de que el subproceso entre en la cola de subprocesos listos.

exitContext
Boolean

true para abandonar y volver a adquirir el dominio de sincronización para el contexto (en caso de encontrarse en un contexto sincronizado) antes de que transcurra la espera; en caso contrario, false.

Devoluciones

Es true si se volvió a adquirir el bloqueo antes de que transcurriera el período de tiempo especificado; es false si se volvió a adquirir el bloqueo después de que transcurriera el período de tiempo especificado. El método no devuelve ningún resultado hasta que se vuelva a adquirir el bloqueo.

Atributos

Excepciones

El parámetro obj es null.

Wait no se invoca desde dentro de un bloque de código sincronizado.

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

El valor del parámetro millisecondsTimeout es negativo, y no igual a Infinite.

Comentarios

Para obtener más información sobre esta API, consulte Comentarios complementarios de la API para Monitor.Wait.

Consulte también

Se aplica a

Wait(Object)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

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

public:
 static bool Wait(System::Object ^ obj);
public static bool Wait (object obj);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj);
static member Wait : obj -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean

Parámetros

obj
Object

Objeto en el que se va a esperar.

Devoluciones

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.

Atributos

Excepciones

El parámetro obj es null.

El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.

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

Comentarios

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

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

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

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

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

Los Pulsemétodos , PulseAlly Wait se deben invocar desde dentro de un bloque de código sincronizado.

Los comentarios del Pulse método explican lo que sucede si Pulse se llama cuando no hay subprocesos en espera.

Consulte también

Se aplica a

Wait(Object, Int32)

Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs
Source:
Monitor.CoreCLR.cs

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.

public:
 static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait (object obj, int millisecondsTimeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean

Parámetros

obj
Object

Objeto en el que se va a esperar.

millisecondsTimeout
Int32

Número de milisegundos que se va a estar a la espera antes de que el subproceso entre en la cola de subprocesos listos.

Devoluciones

Es true si se volvió a adquirir el bloqueo antes de que transcurriera el período de tiempo especificado; es false si se volvió a adquirir el bloqueo después de que transcurriera el período de tiempo especificado. El método no devuelve ningún resultado hasta que se vuelva a adquirir el bloqueo.

Atributos

Excepciones

El parámetro obj es null.

El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.

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

El valor del parámetro millisecondsTimeout es negativo, y no igual a Infinite.

Comentarios

Este método no devuelve hasta que vuelve a adquirir un bloqueo exclusivo en el obj parámetro .

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

El tiempo de espera garantiza que el subproceso actual no se bloquee indefinidamente si otro subproceso libera el bloqueo sin llamar primero al Pulse método o PulseAll . También mueve el subproceso a la cola lista, omitiendo otros subprocesos delante de él en la cola de espera, para que pueda volver a adquirir el bloqueo antes. El subproceso puede probar el valor devuelto del Wait método para determinar si ha vuelto a adquirir el bloqueo antes del tiempo de espera. El subproceso puede evaluar las condiciones que provocaron que entrara en la espera y, si es necesario, llame al Wait método de nuevo.

Cuando un subproceso llama a Wait, libera el bloqueo en el objeto y entra en la cola de espera del objeto. El siguiente subproceso de la cola lista del objeto (si hay alguno) adquiere el bloqueo y tiene un uso exclusivo del objeto . El subproceso invocado Wait permanece en la cola en espera hasta que un subproceso PulseAllque contiene el bloqueo invoca o es el siguiente en la cola y un subproceso Pulseque contiene el bloqueo invoca . Sin embargo, si millisecondsTimeout transcurre antes de que otro subproceso invoque el método o PulseAll el Pulse objeto, el subproceso original se mueve a la cola lista para recuperar el bloqueo.

Nota

Si Infinite se especifica para el millisecondsTimeout parámetro , este método se bloquea indefinidamente a menos que el titular del bloqueo llame a Pulse o PulseAll. Si millisecondsTimeout es igual a 0, el subproceso que llama Wait libera el bloqueo y, a continuación, entra inmediatamente en la cola lista para recuperar el bloqueo.

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

Nota

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

Los Pulsemétodos , PulseAlly Wait se deben invocar desde dentro de un bloque de código sincronizado.

Los comentarios del Pulse método explican lo que sucede si Pulse se llama cuando no hay subprocesos en espera.

Consulte también

Se aplica a

Wait(Object, TimeSpan)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait (object obj, TimeSpan timeout);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean

Parámetros

obj
Object

Objeto en el que se va a esperar.

timeout
TimeSpan

TimeSpan que representa la cantidad de tiempo que se va a esperar antes de que el subproceso entre en la cola de subprocesos listos.

Devoluciones

Es true si se volvió a adquirir el bloqueo antes de que transcurriera el período de tiempo especificado; es false si se volvió a adquirir el bloqueo después de que transcurriera el período de tiempo especificado. El método no devuelve ningún resultado hasta que se vuelva a adquirir el bloqueo.

Atributos

Excepciones

El parámetro obj es null.

El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.

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

El valor del timeout parámetro en milisegundos es negativo y no representa Infinite (-1 milisegundos) o es mayor que Int32.MaxValue.

Comentarios

Este método no devuelve hasta que vuelve a adquirir un bloqueo exclusivo en el obj parámetro .

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

El tiempo de espera garantiza que el subproceso actual no se bloquee indefinidamente si otro subproceso libera el bloqueo sin llamar primero al Pulse método o PulseAll . También mueve el subproceso a la cola lista, omitiendo otros subprocesos delante de él en la cola de espera, para que pueda volver a adquirir el bloqueo antes. El subproceso puede probar el valor devuelto del Wait método para determinar si ha vuelto a adquirir el bloqueo antes del tiempo de espera. El subproceso puede evaluar las condiciones que provocaron que entrara en la espera y, si es necesario, llame al Wait método de nuevo.

Cuando un subproceso llama a Wait, libera el bloqueo en el objeto y entra en la cola de espera del objeto. El siguiente subproceso de la cola lista del objeto (si hay alguno) adquiere el bloqueo y tiene un uso exclusivo del objeto . El subproceso invocado Wait permanece en la cola en espera hasta que un subproceso PulseAllque contiene el bloqueo invoca o es el siguiente en la cola y un subproceso Pulseque contiene el bloqueo invoca . Sin embargo, si timeout transcurre antes de que otro subproceso invoque el método o PulseAll el Pulse objeto, el subproceso original se mueve a la cola lista para recuperar el bloqueo.

Nota

Si se especifica un TimeSpan que representa -1 milisegundos para el timeout parámetro , este método se bloquea indefinidamente a menos que el titular del bloqueo llame a Pulse o PulseAll. Si timeout es de 0 milisegundos, el subproceso que llama Wait libera el bloqueo y, a continuación, entra inmediatamente en la cola lista para recuperar el bloqueo.

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

Nota

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

Los Pulsemétodos , PulseAlly Wait se deben invocar desde dentro de un bloque de código sincronizado.

Los comentarios del Pulse método explican lo que sucede si Pulse se llama cuando no hay subprocesos en espera.

Consulte también

Se aplica a

Wait(Object, TimeSpan, Boolean)

Source:
Monitor.cs
Source:
Monitor.cs
Source:
Monitor.cs

Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo. Si transcurre el intervalo de tiempo de espera especificado, el subproceso entra en la cola de subprocesos listos. De modo opcional, sale del dominio de sincronización del contexto sincronizado antes de la espera y vuelve a adquirir el dominio después.

public:
 static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait (object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean

Parámetros

obj
Object

Objeto en el que se va a esperar.

timeout
TimeSpan

TimeSpan que representa la cantidad de tiempo que se va a esperar antes de que el subproceso entre en la cola de subprocesos listos.

exitContext
Boolean

true para abandonar y volver a adquirir el dominio de sincronización para el contexto (en caso de encontrarse en un contexto sincronizado) antes de que transcurra la espera; en caso contrario, false.

Devoluciones

Es true si se volvió a adquirir el bloqueo antes de que transcurriera el período de tiempo especificado; es false si se volvió a adquirir el bloqueo después de que transcurriera el período de tiempo especificado. El método no devuelve ningún resultado hasta que se vuelva a adquirir el bloqueo.

Atributos

Excepciones

El parámetro obj es null.

Wait no se invoca desde dentro de un bloque de código sincronizado.

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

El timeout parámetro es negativo y no representa Infinite (-1 milisegundos) o es mayor que Int32.MaxValue.

Comentarios

Para obtener más información sobre esta API, consulte Comentarios complementarios de la API para Monitor.Wait.

Consulte también

Se aplica a