Monitor.Wait Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Libera el bloqueo en un objeto y bloquea el subproceso actual hasta que vuelve a adquirir el bloqueo.
Sobrecargas
| Nombre | Description |
|---|---|
| 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 lista. Este método también especifica si el dominio de sincronización para el contexto (si está en un contexto sincronizado) se cierra antes de la espera y se vuelve a adquirir 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 lista. |
| 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 lista. |
| 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 lista. Opcionalmente, sale del dominio de sincronización para el 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
- 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 lista. Este método también especifica si el dominio de sincronización para el contexto (si está en un contexto sincronizado) se cierra antes de la espera y se vuelve a adquirir después.
public:
static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * int * bool -> bool
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 van a esperar antes de que el subproceso entre en la cola lista.
- exitContext
- Boolean
true para salir y volver a adquirir el dominio de sincronización para el contexto (si está en un contexto sincronizado) antes de la espera; de lo contrario, false.
Devoluciones
true si el bloqueo se volvió a adquirir antes de que transcurriese el tiempo especificado; false si el bloqueo se ha vuelto a adquirir después del tiempo especificado transcurrido. El método no devuelve hasta que se vuelve a adquirir el bloqueo.
- Atributos
Excepciones
El obj parámetro es null.
Wait no se invoca desde dentro de un bloque de código sincronizado.
El subproceso Wait que invoca se interrumpe posteriormente desde el estado de espera. Esto sucede cuando otro subproceso llama al método de Interrupt() este subproceso.
El valor del millisecondsTimeout parámetro es negativo y no es igual a Infinite.
Comentarios
Para obtener más información sobre esta API, consulte Comentarios complementarios de api para Monitor.Wait.
Consulte también
Se aplica a
Wait(Object)
- Source:
- Monitor.cs
- Source:
- Monitor.cs
- 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 devuelta porque el autor de la llamada volvió a adquirir el bloqueo para el objeto especificado. Este método no devuelve si el bloqueo no se vuelve a adquirir.
- Atributos
Excepciones
El obj parámetro es null.
El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.
El subproceso Wait que invoca se interrumpe posteriormente desde el estado de espera. Esto sucede cuando otro subproceso llama al método de Interrupt() 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 acceder 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 en espera del objeto. El siguiente subproceso de la cola lista del objeto (si hay uno) 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 esperan 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 llamador ejecuta Wait una vez, sin importar la cantidad de veces que se haya invocado Enter en 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 para volver a adquirir el objeto. Cuando el autor de la llamada vuelve a adquirir el bloqueo, el sistema llama a Enter tantas veces como sea necesario para restaurar el recuento de Enter guardado 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 esperan 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 sobre el método Pulse explican lo que sucede si se llama a Pulse cuando no hay subprocesos en espera.
Consulte también
Se aplica a
Wait(Object, Int32)
- Source:
- Monitor.CoreCLR.cs
- Source:
- Monitor.cs
- 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 lista.
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 van a esperar antes de que el subproceso entre en la cola lista.
Devoluciones
true si el bloqueo se volvió a adquirir antes de que transcurriese el tiempo especificado; false si el bloqueo se ha vuelto a adquirir después del tiempo especificado transcurrido. El método no devuelve hasta que se vuelve a adquirir el bloqueo.
- Atributos
Excepciones
El obj parámetro es null.
El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.
El subproceso Wait que invoca se interrumpe posteriormente desde el estado de espera. Esto sucede cuando otro subproceso llama al método de Interrupt() este subproceso.
El valor del millisecondsTimeout parámetro es negativo y no es igual a Infinite.
Comentarios
Este método no devuelve hasta que vuelve a adquirir un bloqueo exclusivo en el parámetro obj.
El subproceso que posee actualmente el bloqueo en el objeto especificado invoca este método para liberar el objeto para que otro subproceso pueda acceder 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 a los métodos Pulse o PulseAll. También mueve el subproceso a la cola de subprocesos listos, pasando otros subprocesos por delante en la cola de espera, de modo que pueda volver a adquirir el bloqueo antes. El subproceso puede comprobar el valor devuelto del método Wait 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 espera y, si es necesario, llamar al método Wait de nuevo.
Cuando un subproceso llama a Wait, libera el bloqueo en el objeto y entra en la cola en espera del objeto. El siguiente subproceso de la cola lista del objeto (si hay uno) adquiere el bloqueo y tiene un uso exclusivo del objeto. El hilo que invoca Wait permanece en la cola de espera hasta que un hilo que posee el bloqueo invoca PulseAll, o hasta que sea el siguiente en la cola y un hilo que posee el bloqueo invoca Pulse. Sin embargo, si transcurre millisecondsTimeout antes de que otro subproceso invoque el método Pulse o PulseAll de este objeto, el subproceso original se mueve a la cola de subprocesos listos para recuperar el bloqueo.
Note
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 libera el bloqueo Wait y, a continuación, entra inmediatamente en la cola de subprocesos listos para recuperar el bloqueo.
El llamador ejecuta Wait una vez, sin importar la cantidad de veces que se haya invocado Enter en 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 para volver a adquirir el objeto. Cuando el autor de la llamada vuelve a adquirir el bloqueo, el sistema llama a Enter tantas veces como sea necesario para restaurar el recuento de Enter guardado 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.
Note
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 esperan 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 sobre el método Pulse explican lo que sucede si se llama a Pulse cuando no hay subprocesos en espera.
Consulte también
Se aplica a
Wait(Object, TimeSpan)
- Source:
- Monitor.cs
- Source:
- Monitor.cs
- 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 lista.
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
que TimeSpan representa la cantidad de tiempo que se debe esperar antes de que el subproceso entre en la cola lista.
Devoluciones
true si el bloqueo se volvió a adquirir antes de que transcurriese el tiempo especificado; false si el bloqueo se ha vuelto a adquirir después del tiempo especificado transcurrido. El método no devuelve hasta que se vuelve a adquirir el bloqueo.
- Atributos
Excepciones
El obj parámetro es null.
El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.
El subproceso Wait que invoca se interrumpe posteriormente desde el estado de espera. Esto sucede cuando otro subproceso llama al método de Interrupt() 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 parámetro obj.
El subproceso que posee actualmente el bloqueo en el objeto especificado invoca este método para liberar el objeto para que otro subproceso pueda acceder 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 a los métodos Pulse o PulseAll. También mueve el subproceso a la cola de subprocesos listos, pasando otros subprocesos por delante en la cola de espera, de modo que pueda volver a adquirir el bloqueo antes. El subproceso puede comprobar el valor devuelto del método Wait 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 espera y, si es necesario, llamar al método Wait de nuevo.
Cuando un subproceso llama a Wait, libera el bloqueo en el objeto y entra en la cola en espera del objeto. El siguiente subproceso de la cola lista del objeto (si hay uno) adquiere el bloqueo y tiene un uso exclusivo del objeto. El hilo que invoca Wait permanece en la cola de espera hasta que un hilo que posee el bloqueo invoca PulseAll, o hasta que sea el siguiente en la cola y un hilo que posee el bloqueo invoca Pulse. Sin embargo, si transcurre timeout antes de que otro subproceso invoque el método Pulse o PulseAll de este objeto, el subproceso original se mueve a la cola de subprocesos listos para recuperar el bloqueo.
Note
Si se especifica un TimeSpan que representa -1 milisegundos para el parámetro timeout, este método se bloquea indefinidamente a menos que el poseedor del bloqueo llame a Pulse o PulseAll. Si timeout es igual a 0 milisegundos, el subproceso que llama libera el bloqueo Wait y, a continuación, entra inmediatamente en la cola de subprocesos listos para recuperar el bloqueo.
El llamador ejecuta Wait una vez, sin importar la cantidad de veces que se haya invocado Enter en 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 para volver a adquirir el objeto. Cuando el autor de la llamada vuelve a adquirir el bloqueo, el sistema llama a Enter tantas veces como sea necesario para restaurar el recuento de Enter guardado 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.
Note
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 esperan 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 sobre el método Pulse explican lo que sucede si se llama a Pulse 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
- 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 lista. Opcionalmente, sale del dominio de sincronización para el 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);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member Wait : obj * TimeSpan * bool -> bool
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
que TimeSpan representa la cantidad de tiempo que se debe esperar antes de que el subproceso entre en la cola lista.
- exitContext
- Boolean
true para salir y volver a adquirir el dominio de sincronización para el contexto (si está en un contexto sincronizado) antes de la espera; de lo contrario, false.
Devoluciones
true si el bloqueo se volvió a adquirir antes de que transcurriese el tiempo especificado; false si el bloqueo se ha vuelto a adquirir después del tiempo especificado transcurrido. El método no devuelve hasta que se vuelve a adquirir el bloqueo.
- Atributos
Excepciones
El obj parámetro es null.
Wait no se invoca desde dentro de un bloque de código sincronizado.
El subproceso que invoca Wait se interrumpe más adelante desde el estado de espera. Esto sucede cuando otro subproceso llama al método de Interrupt() 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 api para Monitor.Wait.