Monitor.Wait Metoda

Definicja

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady.

Przeciążenia

Wait(Object, Int32, Boolean)

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki. Ta metoda określa również, czy domena synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) jest zamykana przed oczekiwaniem i ponownie następnie.

Wait(Object)

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady.

Wait(Object, Int32)

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki.

Wait(Object, TimeSpan)

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki.

Wait(Object, TimeSpan, Boolean)

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki. Opcjonalnie zamyka domenę synchronizacji dla zsynchronizowanych kontekstów przed oczekiwaniem i ponownie wyszukuje domenę później.

Wait(Object, Int32, Boolean)

Źródło:
Monitor.cs
Źródło:
Monitor.cs
Źródło:
Monitor.cs

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki. Ta metoda określa również, czy domena synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) jest zamykana przed oczekiwaniem i ponownie następnie.

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

Parametry

obj
Object

Obiekt, na którym ma czekać.

millisecondsTimeout
Int32

Liczba milisekund oczekiwania przed wejściem wątku do gotowej kolejki.

exitContext
Boolean

true aby zamknąć i ponownie uzyskać domenę synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) przed oczekiwaniem; w przeciwnym razie , false.

Zwraca

true jeśli blokada została ponownie zakłaszona przed upływem określonego czasu; false jeśli blokada została ponownie zakłaszona po upływie określonego czasu. Metoda nie zwraca się do momentu ponownego zablokowania.

Atrybuty

Wyjątki

Parametr obj ma wartość null.

Wait nie jest wywoływany z poziomu zsynchronizowanego bloku kodu.

Wątek, który wywołuje Wait , zostanie później przerwany ze stanu oczekiwania. Dzieje się tak, gdy inny wątek wywołuje metodę tego wątku Interrupt() .

Wartość parametru millisecondsTimeout jest ujemna i nie jest równa Infinite.

Uwagi

Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz dodatkowe uwagi dotyczące interfejsu API monitor.wait.

Zobacz też

Dotyczy

Wait(Object)

Źródło:
Monitor.cs
Źródło:
Monitor.cs
Źródło:
Monitor.cs

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady.

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

Parametry

obj
Object

Obiekt, na którym ma czekać.

Zwraca

true jeśli wywołanie zostało zwrócone, ponieważ obiekt wywołujący ponownie zwrócił blokadę dla określonego obiektu. Ta metoda nie zwraca się, jeśli blokada nie jest ponownie dostępna.

Atrybuty

Wyjątki

Parametr obj ma wartość null.

Wątek wywołujący nie jest właścicielem blokady dla określonego obiektu.

Wątek, który wywołuje Wait , zostanie później przerwany ze stanu oczekiwania. Dzieje się tak, gdy inny wątek wywołuje metodę tego wątku Interrupt() .

Uwagi

Wątek, który obecnie jest właścicielem blokady w określonym obiekcie, wywołuje tę metodę w celu zwolnienia obiektu, aby inny wątek mógł uzyskać do niego dostęp. Obiekt wywołujący jest zablokowany podczas oczekiwania na ponowne odzyskanie blokady. Ta metoda jest wywoływana, gdy obiekt wywołujący musi poczekać na zmianę stanu, która wystąpi w wyniku operacji innego wątku.

Gdy wątek wywołuje Waitmetodę , zwalnia blokadę obiektu i wprowadza kolejkę oczekującą obiektu. Następny wątek w gotowej kolejce obiektu (jeśli istnieje) uzyskuje blokadę i ma wyłączne użycie obiektu. Wszystkie wątki wywołujące Wait pozostają w kolejce oczekującej, dopóki nie otrzymają sygnału od Pulse lub PulseAll, wysłanego przez właściciela blokady. Jeśli Pulse jest wysyłany, dotyczy to tylko wątku na czele kolejki oczekującej. W przypadku PulseAll wysłania dotyczy to wszystkich wątków oczekujących na obiekt. Po odebraniu sygnału co najmniej jeden wątek opuszcza kolejkę oczekującą i wchodzi do gotowej kolejki. Wątek w gotowej kolejce może ponownie uzyskać blokadę.

Ta metoda jest zwracana, gdy wywołujący wątek ponownie zwraca blokadę obiektu. Należy pamiętać, że ta metoda blokuje się na czas nieokreślony, jeśli uchwyt blokady nie wywołuje metody Pulse lub PulseAll.

Obiekt wywołujący Wait jest wykonywany raz, niezależnie od liczby wywołań Enter dla określonego obiektu. Koncepcyjnie Wait metoda przechowuje liczbę wywołań wywoływanych Enter w obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Obiekt wywołujący następnie blokuje się podczas oczekiwania na ponowne odzyskanie obiektu. Gdy obiekt wywołujący ponownie odbiera blokadę, system wywołuje Enter tyle razy, ile jest to konieczne, aby przywrócić zapisaną Enter liczbę dla obiektu wywołującego. Wywołanie Wait zwalnia blokadę tylko dla określonego obiektu. Jeśli obiekt wywołujący jest właścicielem blokad w innych obiektach, te blokady nie są zwalniane.

Należy pamiętać, że zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, które obecnie przechowuje blokadę, odwołanie do kolejki gotowej, która zawiera wątki, które są gotowe do uzyskania blokady, oraz odwołanie do kolejki oczekującej, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

Metody Pulse, PulseAlli Wait muszą być wywoływane z poziomu zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się dzieje, jeśli Pulse jest wywoływana, gdy nie ma oczekujących wątków.

Zobacz też

Dotyczy

Wait(Object, Int32)

Źródło:
Monitor.CoreCLR.cs
Źródło:
Monitor.CoreCLR.cs
Źródło:
Monitor.CoreCLR.cs

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki.

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

Parametry

obj
Object

Obiekt, na którym ma czekać.

millisecondsTimeout
Int32

Liczba milisekund oczekiwania przed wejściem wątku do gotowej kolejki.

Zwraca

true jeśli blokada została ponownie zakłaszona przed upływem określonego czasu; false jeśli blokada została ponownie zakłaszona po upływie określonego czasu. Metoda nie zwraca się do momentu ponownego zablokowania.

Atrybuty

Wyjątki

Parametr obj ma wartość null.

Wątek wywołujący nie jest właścicielem blokady dla określonego obiektu.

Wątek, który wywołuje Wait , zostanie później przerwany ze stanu oczekiwania. Dzieje się tak, gdy inny wątek wywołuje metodę tego wątku Interrupt() .

Wartość parametru millisecondsTimeout jest ujemna i nie jest równa Infinite.

Uwagi

Ta metoda nie zwraca się, dopóki nie zwróci wyłącznej blokady parametru obj .

Wątek, który obecnie jest właścicielem blokady w określonym obiekcie, wywołuje tę metodę w celu zwolnienia obiektu, aby inny wątek mógł uzyskać do niego dostęp. Obiekt wywołujący jest zablokowany podczas oczekiwania na ponowne odzyskanie blokady. Ta metoda jest wywoływana, gdy obiekt wywołujący musi poczekać na zmianę stanu, która wystąpi w wyniku operacji innego wątku.

Limit czasu zapewnia, że bieżący wątek nie blokuje się na czas nieokreślony, jeśli inny wątek zwalnia blokadę bez uprzedniego Pulse wywołania metody or PulseAll . Przenosi również wątek do gotowej kolejki, pomijając inne wątki przed nim w kolejce oczekiwania, aby można było szybciej odzyskać blokadę. Wątek może przetestować wartość Wait zwracaną metody, aby określić, czy ponownie zwróciła blokadę przed przekroczeniem limitu czasu. Wątek może ocenić warunki, które spowodowały wprowadzenie oczekiwania, i w razie potrzeby wywołać metodę Wait ponownie.

Gdy wątek wywołuje Waitmetodę , zwalnia blokadę obiektu i wprowadza kolejkę oczekującą obiektu. Następny wątek w gotowej kolejce obiektu (jeśli istnieje) uzyskuje blokadę i ma wyłączne użycie obiektu. Wątek, który wywołał Wait , pozostaje w kolejce oczekiwania, dopóki wątek, który przechowuje blokadę wywołuje PulseAll, lub jest to następny w kolejce i wątek, który przechowuje blokadę wywołuje Pulse. Jeśli millisecondsTimeout jednak upłynie, zanim inny wątek wywoła ten obiekt Pulse lub PulseAll metodę, oryginalny wątek zostanie przeniesiony do kolejki gotowej w celu odzyskania blokady.

Uwaga

Jeśli Infinite parametr jest określony millisecondsTimeout , ta metoda blokuje na czas nieokreślony, chyba że właściciel wywołań Pulse blokady lub PulseAll. Jeśli millisecondsTimeout wartość jest równa 0, wątek, który wywołuje Wait zwalnia blokadę, a następnie natychmiast wchodzi do gotowej kolejki w celu odzyskania blokady.

Obiekt wywołujący Wait jest wykonywany raz, niezależnie od liczby wywołań Enter dla określonego obiektu. Koncepcyjnie Wait metoda przechowuje liczbę wywołań wywoływanych Enter w obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Obiekt wywołujący następnie blokuje się podczas oczekiwania na ponowne odzyskanie obiektu. Gdy obiekt wywołujący ponownie odbiera blokadę, system wywołuje Enter tyle razy, ile jest to konieczne, aby przywrócić zapisaną Enter liczbę dla obiektu wywołującego. Wywołanie Wait zwalnia blokadę tylko dla określonego obiektu. Jeśli obiekt wywołujący jest właścicielem blokad w innych obiektach, te blokady nie są zwalniane.

Uwaga

Zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, który obecnie przechowuje blokadę, odwołanie do gotowej kolejki, który zawiera wątki, które są gotowe do uzyskania blokady, oraz odwołanie do kolejki oczekującej, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

Metody Pulse, PulseAlli Wait muszą być wywoływane z poziomu zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się dzieje, jeśli Pulse jest wywoływana, gdy nie ma oczekujących wątków.

Zobacz też

Dotyczy

Wait(Object, TimeSpan)

Źródło:
Monitor.cs
Źródło:
Monitor.cs
Źródło:
Monitor.cs

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki.

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

Parametry

obj
Object

Obiekt, na którym ma czekać.

timeout
TimeSpan

Element TimeSpan reprezentujący czas oczekiwania przed wejściem wątku do gotowej kolejki.

Zwraca

true jeśli blokada została ponownie zakłaszona przed upływem określonego czasu; false jeśli blokada została ponownie zakłaszona po upływie określonego czasu. Metoda nie zwraca się do momentu ponownego zablokowania.

Atrybuty

Wyjątki

Parametr obj ma wartość null.

Wątek wywołujący nie jest właścicielem blokady dla określonego obiektu.

Wątek, który wywołuje Wait , zostanie później przerwany ze stanu oczekiwania. Dzieje się tak, gdy inny wątek wywołuje metodę tego wątku Interrupt() .

Wartość parametru timeout w milisekundach jest ujemna i nie reprezentuje Infinite wartości (-1 milisekund) lub jest większa niż Int32.MaxValue.

Uwagi

Ta metoda nie zwraca się, dopóki nie zwróci wyłącznej blokady parametru obj .

Wątek, który obecnie jest właścicielem blokady w określonym obiekcie, wywołuje tę metodę w celu zwolnienia obiektu, aby inny wątek mógł uzyskać do niego dostęp. Obiekt wywołujący jest zablokowany podczas oczekiwania na ponowne odzyskanie blokady. Ta metoda jest wywoływana, gdy obiekt wywołujący musi poczekać na zmianę stanu, która wystąpi w wyniku operacji innego wątku.

Limit czasu zapewnia, że bieżący wątek nie blokuje się na czas nieokreślony, jeśli inny wątek zwalnia blokadę bez uprzedniego Pulse wywołania metody or PulseAll . Przenosi również wątek do gotowej kolejki, pomijając inne wątki przed nim w kolejce oczekiwania, aby można było szybciej odzyskać blokadę. Wątek może przetestować wartość Wait zwracaną metody, aby określić, czy ponownie zwróciła blokadę przed przekroczeniem limitu czasu. Wątek może ocenić warunki, które spowodowały wprowadzenie oczekiwania, i w razie potrzeby wywołać metodę Wait ponownie.

Gdy wątek wywołuje Waitmetodę , zwalnia blokadę obiektu i wprowadza kolejkę oczekującą obiektu. Następny wątek w gotowej kolejce obiektu (jeśli istnieje) uzyskuje blokadę i ma wyłączne użycie obiektu. Wątek, który wywołał Wait , pozostaje w kolejce oczekiwania, dopóki wątek, który przechowuje blokadę wywołuje PulseAll, lub jest to następny w kolejce i wątek, który przechowuje blokadę wywołuje Pulse. Jeśli timeout jednak upłynie, zanim inny wątek wywoła ten obiekt Pulse lub PulseAll metodę, oryginalny wątek zostanie przeniesiony do kolejki gotowej w celu odzyskania blokady.

Uwaga

Jeśli dla parametru timeout określono wartość reprezentującą TimeSpan -1 milisekundę, ta metoda blokuje czas nieokreślony, chyba że właściciel wywołań Pulse blokady lub PulseAll. Jeśli timeout jest 0 milisekund, wątek, który wywołuje Wait zwalnia blokadę, a następnie natychmiast wchodzi do gotowej kolejki w celu odzyskania blokady.

Obiekt wywołujący Wait jest wykonywany raz, niezależnie od liczby wywołań Enter dla określonego obiektu. Koncepcyjnie Wait metoda przechowuje liczbę wywołań wywoływanych Enter w obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Obiekt wywołujący następnie blokuje się podczas oczekiwania na ponowne odzyskanie obiektu. Gdy obiekt wywołujący ponownie odbiera blokadę, system wywołuje Enter tyle razy, ile jest to konieczne, aby przywrócić zapisaną Enter liczbę dla obiektu wywołującego. Wywołanie Wait zwalnia blokadę tylko dla określonego obiektu. Jeśli obiekt wywołujący jest właścicielem blokad w innych obiektach, te blokady nie są zwalniane.

Uwaga

Zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, który obecnie przechowuje blokadę, odwołanie do gotowej kolejki, który zawiera wątki, które są gotowe do uzyskania blokady, oraz odwołanie do kolejki oczekującej, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

Metody Pulse, PulseAlli Wait muszą być wywoływane z poziomu zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się dzieje, jeśli Pulse jest wywoływana, gdy nie ma oczekujących wątków.

Zobacz też

Dotyczy

Wait(Object, TimeSpan, Boolean)

Źródło:
Monitor.cs
Źródło:
Monitor.cs
Źródło:
Monitor.cs

Zwalnia blokadę obiektu i blokuje bieżący wątek, dopóki nie odzyska blokady. Jeśli określony interwał limitu czasu upłynie, wątek wchodzi do gotowej kolejki. Opcjonalnie zamyka domenę synchronizacji dla zsynchronizowanych kontekstów przed oczekiwaniem i ponownie wyszukuje domenę później.

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

Parametry

obj
Object

Obiekt, na którym ma czekać.

timeout
TimeSpan

Element TimeSpan reprezentujący czas oczekiwania przed wejściem wątku do gotowej kolejki.

exitContext
Boolean

true aby zamknąć i ponownie uzyskać domenę synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) przed oczekiwaniem; w przeciwnym razie , false.

Zwraca

true jeśli blokada została ponownie zakłaszona przed upływem określonego czasu; false jeśli blokada została ponownie zakłaszona po upływie określonego czasu. Metoda nie zwraca się do momentu ponownego zablokowania.

Atrybuty

Wyjątki

Parametr obj ma wartość null.

Wait nie jest wywoływany z poziomu zsynchronizowanego bloku kodu.

Wątek, który wywołuje oczekiwanie, zostanie później przerwany ze stanu oczekiwania. Dzieje się tak, gdy inny wątek wywołuje metodę tego wątku Interrupt() .

Parametr timeout jest ujemny i nie reprezentuje Infinite wartości (-1 milisekund) lub jest większy niż Int32.MaxValue.

Uwagi

Aby uzyskać więcej informacji na temat tego interfejsu API, zobacz dodatkowe uwagi dotyczące interfejsu API monitor.wait.

Zobacz też

Dotyczy