Monitor.Wait Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente.
Sobrecargas
Wait(Object, Int32, Boolean) |
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. Esse método também especifica se o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) é encerrado antes do tempo de espera e readquirido posteriormente. |
Wait(Object) |
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. |
Wait(Object, Int32) |
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. |
Wait(Object, TimeSpan) |
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. |
Wait(Object, TimeSpan, Boolean) |
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. Opcionalmente, encerra o domínio de sincronização para o contexto sincronizado antes do tempo de espera e, depois disso, readquire o domínio. |
Wait(Object, Int32, Boolean)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. Esse método também especifica se o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) é encerrado antes do tempo de espera e readquirido posteriormente.
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
O objeto no qual aguardar.
- millisecondsTimeout
- Int32
O número de milissegundos de espera antes que o thread entre na fila pronta.
- exitContext
- Boolean
true
para sair e readquirir o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) antes do tempo de espera; caso contrário, false
.
Retornos
true
se o bloqueio foi readquirido antes de ter decorrido o tempo especificado e false
se o bloqueio foi readquirido depois que o tempo especificado foi decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O parâmetro obj
é null
.
Wait
não é invocado de dentro de um bloco de código sincronizado.
O thread que invoca Wait
é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método Interrupt() desse thread.
O valor do parâmetro millisecondsTimeout
é negativo e não é igual a Infinite.
Comentários
Para obter mais informações sobre essa API, consulte Comentários de API complementares para Monitor.Wait.
Confira também
Aplica-se a
Wait(Object)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente.
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
O objeto no qual aguardar.
Retornos
true
se a chamada foi retornada porque o chamador adquiriu o bloqueio novamente para o objeto especificado. Este método não será retornado se o bloqueio não for adquirido novamente.
- Atributos
Exceções
O parâmetro obj
é null
.
O thread de chamada não é proprietário do bloqueio do objeto especificado.
O thread que invoca Wait
é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método Interrupt() desse thread.
Comentários
O thread que atualmente possui o bloqueio no objeto especificado invoca esse método para liberar o objeto para que outro thread possa acessá-lo. O chamador é bloqueado enquanto aguarda a requisitar o bloqueio. Esse método é chamado quando o chamador precisa aguardar uma alteração de estado que ocorrerá como resultado das operações de outro thread.
Quando um thread chama Wait
, ele libera o bloqueio no objeto e entra na fila de espera do objeto. O próximo thread na fila pronta do objeto (se houver um) adquire o bloqueio e tem uso exclusivo do objeto. Todos os threads que chamam Wait
permanecem na fila de espera até receberem um sinal de Pulse ou PulseAll, enviado pelo proprietário do bloqueio. Se Pulse
for enviado, somente o thread na cabeça da fila de espera será afetado. Se PulseAll
for enviado, todos os threads que estão aguardando o objeto serão afetados. Quando o sinal é recebido, um ou mais threads saem da fila de espera e entram na fila pronta. Um thread na fila pronta tem permissão para requisitar o bloqueio.
Esse método retorna quando o thread de chamada requisitar o bloqueio no objeto . Observe que esse método bloqueia indefinidamente se o titular do bloqueio não chamar Pulse
ou PulseAll
.
O chamador é Wait
executado uma vez, independentemente do número de vezes Enter que foi invocado para o objeto especificado. Conceitualmente, o Wait
método armazena o número de vezes que o chamador invocado Enter
no objeto e invoca Exit
quantas vezes for necessário para liberar totalmente o objeto bloqueado. Em seguida, o chamador bloqueia enquanto aguarda a requisitar o objeto. Quando o chamador solicita o bloqueio, o sistema chama Enter
quantas vezes for necessário para restaurar a contagem salva Enter
para o chamador. Chamar Wait
libera o bloqueio somente para o objeto especificado; se o chamador for o proprietário dos bloqueios em outros objetos, esses bloqueios não serão liberados.
Observe que um objeto sincronizado contém várias referências, incluindo uma referência ao thread que atualmente mantém o bloqueio, uma referência à fila pronta, que contém os threads que estão prontos para obter o bloqueio e uma referência à fila de espera, que contém os threads que estão aguardando a notificação de uma alteração no estado do objeto.
Os Pulsemétodos , PulseAlle Wait
devem ser invocados de dentro de um bloco de código sincronizado.
As observações do Pulse método explicam o que acontece se Pulse for chamado quando nenhum thread está aguardando.
Confira também
Aplica-se a
Wait(Object, Int32)
- Origem:
- Monitor.CoreCLR.cs
- Origem:
- Monitor.CoreCLR.cs
- Origem:
- Monitor.CoreCLR.cs
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta.
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
O objeto no qual aguardar.
- millisecondsTimeout
- Int32
O número de milissegundos de espera antes que o thread entre na fila pronta.
Retornos
true
se o bloqueio foi readquirido antes de ter decorrido o tempo especificado e false
se o bloqueio foi readquirido depois que o tempo especificado foi decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O parâmetro obj
é null
.
O thread de chamada não é proprietário do bloqueio do objeto especificado.
O thread que invoca Wait
é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método Interrupt() desse thread.
O valor do parâmetro millisecondsTimeout
é negativo e não é igual a Infinite.
Comentários
Esse método não retorna até que ele requisite um bloqueio exclusivo no obj
parâmetro .
O thread que atualmente possui o bloqueio no objeto especificado invoca esse método para liberar o objeto para que outro thread possa acessá-lo. O chamador é bloqueado enquanto aguarda a requisitar o bloqueio. Esse método é chamado quando o chamador precisa aguardar uma alteração de estado que ocorrerá como resultado das operações de outro thread.
O tempo limite garante que o thread atual não seja bloqueado indefinidamente se outro thread liberar o bloqueio sem chamar primeiro o Pulse método ou PulseAll . Ele também move o thread para a fila pronta, ignorando outros threads à frente dele na fila de espera, para que ele possa requisitar o bloqueio mais cedo. O thread pode testar o valor retornado do Wait método para determinar se ele requisitou novamente o bloqueio antes do tempo limite. O thread pode avaliar as condições que fizeram com que ele insira a espera e, se necessário, chame o Wait método novamente.
Quando um thread chama Wait
, ele libera o bloqueio no objeto e entra na fila de espera do objeto. O próximo thread na fila pronta do objeto (se houver um) adquire o bloqueio e tem uso exclusivo do objeto. O thread invocado Wait
permanece na fila de espera até que um thread que contém o bloqueio invoque PulseAllou seja o próximo na fila e um thread que contém o bloqueio invoca Pulse. No entanto, se millisecondsTimeout
decorrido antes que outro thread invoque o método ou PulseAll desse objetoPulse, o thread original será movido para a fila pronta para recuperar o bloqueio.
Observação
Se Infinite for especificado para o millisecondsTimeout
parâmetro , esse método será bloqueado indefinidamente, a menos que o titular das chamadas Pulse de bloqueio ou PulseAll. Se millisecondsTimeout
for igual a 0, o thread que chama Wait
libera o bloqueio e, em seguida, entra imediatamente na fila pronta para recuperar o bloqueio.
O chamador é Wait
executado uma vez, independentemente do número de vezes Enter que foi invocado para o objeto especificado. Conceitualmente, o Wait
método armazena o número de vezes que o chamador invocado Enter no objeto e invoca Exit quantas vezes for necessário para liberar totalmente o objeto bloqueado. Em seguida, o chamador bloqueia enquanto aguarda a requisitar o objeto. Quando o chamador solicita o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a contagem salva Enter para o chamador. Chamar Wait
libera o bloqueio somente para o objeto especificado; se o chamador for o proprietário dos bloqueios em outros objetos, esses bloqueios não serão liberados.
Observação
Um objeto sincronizado contém várias referências, incluindo uma referência ao thread que atualmente mantém o bloqueio, uma referência à fila pronta, que contém os threads que estão prontos para obter o bloqueio e uma referência à fila de espera, que contém os threads que estão aguardando a notificação de uma alteração no estado do objeto.
Os Pulsemétodos , PulseAlle Wait
devem ser invocados de dentro de um bloco de código sincronizado.
As observações do Pulse método explicam o que acontece se Pulse for chamado quando nenhum thread está aguardando.
Confira também
Aplica-se a
Wait(Object, TimeSpan)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta.
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
O objeto no qual aguardar.
- timeout
- TimeSpan
Um TimeSpan que representa o período de tempo de espera antes que o thread entre na fila pronta.
Retornos
true
se o bloqueio foi readquirido antes de ter decorrido o tempo especificado e false
se o bloqueio foi readquirido depois que o tempo especificado foi decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O parâmetro obj
é null
.
O thread de chamada não é proprietário do bloqueio do objeto especificado.
O thread que invoca Wait
é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método Interrupt() desse thread.
O valor do timeout
parâmetro em milissegundos é negativo e não representa Infinite (-1 milissegundo) ou é maior que Int32.MaxValue.
Comentários
Esse método não retorna até que ele requisite um bloqueio exclusivo no obj
parâmetro .
O thread que atualmente possui o bloqueio no objeto especificado invoca esse método para liberar o objeto para que outro thread possa acessá-lo. O chamador é bloqueado enquanto aguarda a requisitar o bloqueio. Esse método é chamado quando o chamador precisa aguardar uma alteração de estado que ocorrerá como resultado das operações de outro thread.
O tempo limite garante que o thread atual não seja bloqueado indefinidamente se outro thread liberar o bloqueio sem chamar primeiro o Pulse método ou PulseAll . Ele também move o thread para a fila pronta, ignorando outros threads à frente dele na fila de espera, para que ele possa requisitar o bloqueio mais cedo. O thread pode testar o valor retornado do Wait método para determinar se ele requisitou novamente o bloqueio antes do tempo limite. O thread pode avaliar as condições que fizeram com que ele insira a espera e, se necessário, chame o Wait método novamente.
Quando um thread chama Wait
, ele libera o bloqueio no objeto e entra na fila de espera do objeto. O próximo thread na fila pronta do objeto (se houver um) adquire o bloqueio e tem uso exclusivo do objeto. O thread invocado Wait
permanece na fila de espera até que um thread que contém o bloqueio invoque PulseAllou seja o próximo na fila e um thread que contém o bloqueio invoca Pulse. No entanto, se timeout
decorrido antes que outro thread invoque o método ou PulseAll desse objetoPulse, o thread original será movido para a fila pronta para recuperar o bloqueio.
Observação
Se um TimeSpan que representa -1 milissegundo for especificado para o timeout
parâmetro , esse método será bloqueado indefinidamente, a menos que o titular das chamadas Pulse de bloqueio ou PulseAll. Se timeout
for 0 milissegundos, o thread que chama Wait
libera o bloqueio e entra imediatamente na fila pronta para recuperar o bloqueio.
O chamador é Wait
executado uma vez, independentemente do número de vezes Enter que foi invocado para o objeto especificado. Conceitualmente, o Wait
método armazena o número de vezes que o chamador invocado Enter no objeto e invoca Exit quantas vezes for necessário para liberar totalmente o objeto bloqueado. Em seguida, o chamador bloqueia enquanto aguarda a requisitar o objeto. Quando o chamador solicita o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a contagem salva Enter para o chamador. Chamar Wait
libera o bloqueio somente para o objeto especificado; se o chamador for o proprietário dos bloqueios em outros objetos, esses bloqueios não serão liberados.
Observação
Um objeto sincronizado contém várias referências, incluindo uma referência ao thread que atualmente mantém o bloqueio, uma referência à fila pronta, que contém os threads que estão prontos para obter o bloqueio e uma referência à fila de espera, que contém os threads que estão aguardando a notificação de uma alteração no estado do objeto.
Os Pulsemétodos , PulseAlle Wait
devem ser invocados de dentro de um bloco de código sincronizado.
As observações do Pulse método explicam o que acontece se Pulse for chamado quando nenhum thread está aguardando.
Confira também
Aplica-se a
Wait(Object, TimeSpan, Boolean)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio de um objeto e bloqueia o thread atual até que ele adquira o bloqueio novamente. Se o intervalo de tempo limite especificado transcorrer, o thread entrará na fila pronta. Opcionalmente, encerra o domínio de sincronização para o contexto sincronizado antes do tempo de espera e, depois disso, readquire o domínio.
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
O objeto no qual aguardar.
- timeout
- TimeSpan
Um TimeSpan que representa o período de tempo de espera antes que o thread entre na fila pronta.
- exitContext
- Boolean
true
para sair e readquirir o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) antes do tempo de espera; caso contrário, false
.
Retornos
true
se o bloqueio foi readquirido antes de ter decorrido o tempo especificado e false
se o bloqueio foi readquirido depois que o tempo especificado foi decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O parâmetro obj
é null
.
Wait
não é invocado de dentro de um bloco de código sincronizado.
O thread que invoca Wait é interrompido posteriormente do estado de espera. Isso acontece quando outro thread chama o método Interrupt() desse thread.
O timeout
parâmetro é negativo e não representa Infinite (-1 milissegundo) ou é maior que Int32.MaxValue.
Comentários
Para obter mais informações sobre essa API, consulte Comentários de API complementares para Monitor.Wait.