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 em um objeto e bloqueia o thread atual até que ele requisite o bloqueio.
Sobrecargas
| Nome | Description |
|---|---|
| Wait(Object, Int32, Boolean) |
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. Esse método também especifica se o domínio de sincronização do contexto (se em um contexto sincronizado) é encerrado antes da espera e solicitado posteriormente. |
| Wait(Object) |
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. |
| Wait(Object, Int32) |
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. |
| Wait(Object, TimeSpan) |
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. |
| Wait(Object, TimeSpan, Boolean) |
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. Opcionalmente, sai do domínio de sincronização para o contexto sincronizado antes da espera e solicita o domínio posteriormente. |
Wait(Object, Int32, Boolean)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. Esse método também especifica se o domínio de sincronização do contexto (se em um contexto sincronizado) é encerrado antes da espera e solicitado posteriormente.
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
O objeto no qual aguardar.
- millisecondsTimeout
- Int32
O número de milissegundos a aguardar antes que o thread entre na fila pronta.
- exitContext
- Boolean
true para sair e solicitar novamente o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) antes da espera; caso contrário, false.
Retornos
true se o bloqueio foi readquirido antes do tempo especificado decorrido; false se o bloqueio tiver sido readquirido após o tempo especificado ter decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O obj parâmetro é 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 desse Interrupt() thread.
O valor do millisecondsTimeout parâmetro é negativo e não é igual a Infinite.
Comentários
Para obter mais informações sobre essa API, consulte comentários da API Suplementar para Monitor.Wait.
Confira também
Aplica-se a
Wait(Object)
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio.
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 retornada porque o chamador requisitou novamente o bloqueio para o objeto especificado. Esse método não retornará se o bloqueio não for readquirido.
- Atributos
Exceções
O obj parâmetro é null.
O thread de chamada não possui o bloqueio do objeto especificado.
O thread que invoca Wait é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método desse Interrupt() 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 fica bloqueado enquanto aguarda para readquirir 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 o uso exclusivo do objeto. Todos os threads que chamam Wait permanecem na fila de espera até receberem um sinal de Pulse ou PulseAllenviado pelo proprietário do bloqueio. Se Pulse for enviado, somente o thread à frente 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 inserem a fila pronta. Um thread na fila pronta tem permissão para reaquir o bloqueio.
Esse método retorna quando o thread de chamada requisite o bloqueio no objeto. Observe que esse método bloqueia indefinidamente se o titular do bloqueio não chamar Pulse ou PulseAll.
O chamador executa Wait uma vez, independentemente do número de vezes que Enter tem sido invocado para o objeto especificado. Conceitualmente, o Wait método armazena o número de vezes que o chamador invoca no Enter objeto e invoca Exit quantas vezes for necessário para liberar totalmente o objeto bloqueado. O chamador então bloqueia enquanto aguarda para readquirir o objeto. Quando o chamador readquire o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a contagem salva Enter para o chamador. A chamada Wait libera o bloqueio apenas 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 método Pulse 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.cs
- Origem:
- Monitor.CoreCLR.cs
- Origem:
- Monitor.CoreCLR.cs
- Origem:
- Monitor.CoreCLR.cs
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, 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 a aguardar antes que o thread entre na fila pronta.
Retornos
true se o bloqueio foi readquirido antes do tempo especificado decorrido; false se o bloqueio tiver sido readquirido após o tempo especificado ter decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O obj parâmetro é null.
O thread de chamada não possui o bloqueio do objeto especificado.
O thread que invoca Wait é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método desse Interrupt() thread.
O valor do millisecondsTimeout parâmetro é negativo e não é igual a Infinite.
Comentários
Esse método não retorna até que readquira um bloqueio exclusivo no parâmetro obj.
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 fica bloqueado enquanto aguarda para readquirir 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 a thread atual não fique bloqueada indefinidamente se outra thread liberar o bloqueio sem antes chamar o método Pulse ou o método PulseAll. Ele também move o thread para a fila de prontidão, ignorando outros threads à frente dele na fila de espera, para que ele possa readquirir o bloqueio mais cedo. A thread pode testar o valor retornado do método Wait para determinar se ela requisitou novamente o bloqueio antes do timeout. A thread pode avaliar as condições que a fizeram entrar na espera e, se necessário, chamar o método Wait 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 o uso exclusivo do objeto. O thread que invocou 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 se esgotar antes que outro thread invoque o método Pulse ou PulseAll deste objeto, o thread original será movido para a fila de prontidão para recuperar o bloqueio.
Note
Se Infinite for especificado para millisecondsTimeout parâmetro, esse método será bloqueado indefinidamente, a menos que o titular do bloqueio chame Pulse ou PulseAll. Se millisecondsTimeout for igual a 0, o thread que chama Wait libera o bloqueio e, em seguida, entra imediatamente na fila de prontidão para recuperar o bloqueio.
O chamador executa Wait uma vez, independentemente do número de vezes que Enter tem sido invocado para o objeto especificado. Conceitualmente, o Wait método armazena o número de vezes que o chamador invoca no Enter objeto e invoca Exit quantas vezes for necessário para liberar totalmente o objeto bloqueado. O chamador então bloqueia enquanto aguarda para readquirir o objeto. Quando o chamador readquire o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a contagem salva Enter para o chamador. A chamada Wait libera o bloqueio apenas para o objeto especificado; se o chamador for o proprietário dos bloqueios em outros objetos, esses bloqueios não serão liberados.
Note
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 método Pulse 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
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, 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 tempo de espera antes que o thread entre na fila pronta.
Retornos
true se o bloqueio foi readquirido antes do tempo especificado decorrido; false se o bloqueio tiver sido readquirido após o tempo especificado ter decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O obj parâmetro é null.
O thread de chamada não possui o bloqueio do objeto especificado.
O thread que invoca Wait é posteriormente interrompido do estado de espera. Isso acontece quando outro thread chama o método desse Interrupt() thread.
O valor do timeout parâmetro em milissegundos é negativo e não representa Infinite (-1 milissegundos) ou é maior que Int32.MaxValue.
Comentários
Esse método não retorna até que readquira um bloqueio exclusivo no parâmetro obj.
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 fica bloqueado enquanto aguarda para readquirir 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 a thread atual não fique bloqueada indefinidamente se outra thread liberar o bloqueio sem antes chamar o método Pulse ou o método PulseAll. Ele também move o thread para a fila de prontidão, ignorando outros threads à frente dele na fila de espera, para que ele possa readquirir o bloqueio mais cedo. A thread pode testar o valor retornado do método Wait para determinar se ela requisitou novamente o bloqueio antes do timeout. A thread pode avaliar as condições que a fizeram entrar na espera e, se necessário, chamar o método Wait 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 o uso exclusivo do objeto. O thread que invocou 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 se esgotar antes que outro thread invoque o método Pulse ou PulseAll deste objeto, o thread original será movido para a fila de prontidão para recuperar o bloqueio.
Note
Se um TimeSpan que representa -1 milissegundos for especificado para o parâmetro timeout, esse método será bloqueado indefinidamente, a menos que o titular do bloqueio chame Pulse ou PulseAll. Se timeout for igual a 0 milissegundos, o thread que chama Wait libera o bloqueio e, em seguida, entra imediatamente na fila de prontidão para recuperar o bloqueio.
O chamador executa Wait uma vez, independentemente do número de vezes que Enter tem sido invocado para o objeto especificado. Conceitualmente, o Wait método armazena o número de vezes que o chamador invoca no Enter objeto e invoca Exit quantas vezes for necessário para liberar totalmente o objeto bloqueado. O chamador então bloqueia enquanto aguarda para readquirir o objeto. Quando o chamador readquire o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a contagem salva Enter para o chamador. A chamada Wait libera o bloqueio apenas para o objeto especificado; se o chamador for o proprietário dos bloqueios em outros objetos, esses bloqueios não serão liberados.
Note
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 método Pulse 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
- Origem:
- Monitor.cs
- Origem:
- Monitor.cs
Libera o bloqueio em um objeto e bloqueia o thread atual até que ele requisite o bloqueio. Se o intervalo de tempo limite especificado se esgotar, o thread entrará na fila pronta. Opcionalmente, sai do domínio de sincronização para o contexto sincronizado antes da espera e solicita o domínio posteriormente.
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
O objeto no qual aguardar.
- timeout
- TimeSpan
Um TimeSpan que representa o tempo de espera antes que o thread entre na fila pronta.
- exitContext
- Boolean
true para sair e solicitar novamente o domínio de sincronização para o contexto (se estiver em um contexto sincronizado) antes da espera; caso contrário, false.
Retornos
true se o bloqueio foi readquirido antes do tempo especificado decorrido; false se o bloqueio tiver sido readquirido após o tempo especificado ter decorrido. O método não retorna até que o bloqueio seja readquirido.
- Atributos
Exceções
O obj parâmetro é null.
Wait não é invocado de dentro de um bloco de código sincronizado.
O thread que invoca Wait será interrompido posteriormente do estado de espera. Isso acontece quando outro thread chama o método desse Interrupt() 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 da API Suplementar para Monitor.Wait.