Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método Monitor.Wait (Object, TimeSpan)

 

Libera o bloqueio em um objeto e bloqueia o thread atual até que ele readquire o bloqueio. Se o intervalo de tempo limite especificado expira, o thread entra na fila pronta.

Namespace:   System.Threading
Assembly:  mscorlib (em mscorlib.dll)

public static bool Wait(
	object obj,
	TimeSpan timeout
)

Parâmetros

obj
Type: System.Object

O objeto no qual a aguardar.

timeout
Type: System.TimeSpan

Um TimeSpan que representa a quantidade de tempo de espera antes que o thread entra na fila pronta.

Valor Retornado

Type: System.Boolean

true Se o bloqueio foi readquirido antes de decorrido o tempo especificado; false se o bloqueio foi readquirido depois de decorrido o tempo especificado. O método não retorna até que o bloqueio é readquirido.

Exception Condition
ArgumentNullException

O obj parâmetro é null.

SynchronizationLockException

O thread de chamada não é proprietário de bloqueio para o objeto especificado.

ThreadInterruptedException

O thread que chama Wait é interrompida depois do estado de espera. Isso acontece quando outro thread chama esse thread Interrupt método.

ArgumentOutOfRangeException

O valor da timeout parâmetro em milissegundos é negativo e não representa Infinite (-1 milissegundos), ou é maior do que MaxValue.

Este método não retorna até que ele readquire um bloqueio exclusivo no obj parâmetro.

O thread que atualmente possui o bloqueio no objeto especificado chama esse método para liberar o objeto de modo que outro thread pode acessá-lo. O chamador é bloqueado enquanto aguarda para readquirir o bloqueio. Esse método é chamado quando o chamador precisa esperar por uma alteração de estado que irão ocorrer como resultado de operações do outro thread.

O tempo limite assegura que o thread atual não bloqueie indefinidamente se outro thread libera o bloqueio sem primeiro chamar o Pulse ou PulseAll método. Ele também move o thread para a fila pronta, ignorando os outros threads antes ele na fila de espera, para que ele possa readquirir o bloqueio mais cedo. O thread pode testar o valor de retorno de Wait método para determinar se ele readquiridos o bloqueio antes do tempo limite. O thread pode avaliar as condições que fez com que ele insira a espera, e se necessário chamada a Wait método novamente.

Quando um thread chama Wait, ele libera o bloqueio no objeto e entra em fila de espera do objeto. O próximo segmento na fila pronto do objeto (se houver) adquire o bloqueio e tem uso exclusivo do objeto. O thread de chamada Wait permanece na fila de espera até que um segmento que retém o bloqueio invoca PulseAll, ou é o próximo na fila e invoca um segmento que retém o bloqueio Pulse. No entanto, se timeout decorrido antes que outro thread chama esse objeto Pulse ou PulseAll método, o thread original é movido para a fila pronta para recuperar o bloqueio.

System_CAPS_noteObservação

Se um TimeSpan representar – 1 milissegundo é especificado para o timeout parâmetro, esse método bloqueia indefinidamente, a menos que o proprietário do bloqueio chama Pulse ou PulseAll. Se timeout é 0 milissegundos, o thread que chama Wait libera o bloqueio e, em seguida, entra imediatamente a fila pronta para recuperar o bloqueio.

O chamador executa Wait uma vez, independentemente do número de vezes que Enter foi chamado para o objeto especificado. Conceitualmente, o Wait método armazena o número de vezes que o chamador chamado Enter no objeto e invoca Exit quantas vezes for necessário para liberar completamente o objeto bloqueado. Em seguida, bloqueia o chamador enquanto espera para readquirir o objeto. Quando o chamador readquire o bloqueio, o sistema chama Enter quantas vezes for necessário para restaurar a salvo Enter contagem para o chamador. Chamando Wait libera o bloqueio para o objeto especificado; se o chamador seja o proprietário de bloqueios em outros objetos, esses bloqueios não são liberados.

System_CAPS_noteObservação

Um objeto sincronizado contém várias referências, incluindo uma referência para o thread que mantém o bloqueio no momento, uma referência à fila pronta, que contém os threads que estão prontos para obter o bloqueio, e uma referência para a fila de espera, que contém os threads que estão aguardando a notificação de alteração no estado do objeto.

O Pulse, PulseAll, e Wait métodos devem ser chamados de dentro um bloco de código sincronizado.

Os comentários para o Pulse método explicam o que acontece se Pulse é chamado quando não há segmentos estão aguardando.

Plataforma Universal do Windows
Disponível desde 8
.NET Framework
Disponível desde 1.1
Biblioteca de Classes Portátil
Com suporte no: plataformas portáteis do .NET
Silverlight
Disponível desde 2.0
Windows Phone Silverlight
Disponível desde 7.0
Windows Phone
Disponível desde 8.1
Retornar ao início
Mostrar: