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
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.