Monitor.Wait Método

Definição

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.

Confira também

Aplica-se a