Monitor.Wait Metoda

Definicja

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

Przeciążenia

Nazwa Opis
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 przechodzi do gotowej kolejki. Ta metoda określa również, czy domena synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) zostanie zakończona przed oczekiwaniem i ponownie zaczekanym później.

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 przechodzi 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 przechodzi 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 przechodzi do gotowej kolejki. Opcjonalnie zamyka domenę synchronizacji dla zsynchronizowanych kontekstów przed oczekiwaniem i następnie ponownie wyszukuje domenę.

Wait(Object, Int32, Boolean)

Źródło:
Monitor.cs
Źródło:
Monitor.cs
Ź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 przechodzi do gotowej kolejki. Ta metoda określa również, czy domena synchronizacji dla kontekstu (jeśli w zsynchronizowanym kontekście) zostanie zakończona przed oczekiwaniem i ponownie zaczekanym później.

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

Parametry

obj
Object

Obiekt, na którym należy czekać.

millisecondsTimeout
Int32

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

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 odzyskana przed upływem określonego czasu; false jeśli blokada została odzyskana po upływie określonego czasu. Metoda nie zwraca się, dopóki blokada nie zostanie ponownie zwrócona.

Atrybuty

Wyjątki

Parametr obj jest null.

Wait nie jest wywoływany z 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
Ź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 należy czekać.

Zwraca

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

Atrybuty

Wyjątki

Parametr obj jest 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 określonego obiektu, 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 oczekiwania, dopóki nie otrzymają sygnału od Pulse lub PulseAll, wysłane przez właściciela blokady. W przypadku Pulse wysłania problem dotyczy tylko wątku na czele kolejki oczekiwania. W przypadku PulseAll wysłania dotyczy to wszystkich wątków oczekujących na obiekt. Po odebraniu sygnału co najmniej jeden wątek pozostaw kolejkę oczekującą i wprowadź gotową kolejkę. Wątek w gotowej kolejce może odzyskać blokadę.

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

Obiekt wywołujący wykonuje Wait jednokrotnie, niezależnie od tego, ile razy Enter zostało wywołane dla określonego obiektu. Koncepcyjnie, metoda Wait przechowuje liczbę wywołań Enter na obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Podczas oczekiwania na ponowne uzyskanie obiektu, wywołujący blokuje się. Gdy obiekt wywołujący ponownie odwołuje blokadę, system wywołuje Enter tyle razy, ile razy 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óry 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 oczekiwania, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

PulseMetody , PulseAlli Wait muszą być wywoływane z zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się stanie, 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.cs
Ź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 przechodzi 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 należy czekać.

millisecondsTimeout
Int32

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

Zwraca

true jeśli blokada została odzyskana przed upływem określonego czasu; false jeśli blokada została odzyskana po upływie określonego czasu. Metoda nie zwraca się, dopóki blokada nie zostanie ponownie zwrócona.

Atrybuty

Wyjątki

Parametr obj jest 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 odzyska blokady na wyłączność parametru obj .

Wątek, który obecnie jest właścicielem blokady określonego obiektu, 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 gwarantuje, że bieżący wątek nie blokuje się na czas nieokreślony, jeśli inny wątek zwolni blokadę bez uprzedniego wywołania metody Pulse lub 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ść zwracaną przez metodę Wait, aby określić, czy ponownie odblokowała przed przekroczeniem limitu czasu. Wątek może ocenić warunki, które spowodowały umieszczenie w oczekiwaniu, 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 do momentu, aż wątek, który posiada blokadę, wywoła PulseAll, lub jest następny w kolejce i wątek, który posiada blokadę, wywoła Pulse. millisecondsTimeout Jednak jeśli upłynie on, zanim inny wątek wywoła metodę Pulse lub PulseAll tego obiektu, pierwotny wątek zostanie przeniesiony do kolejki gotowych w celu odzyskania blokady.

Uwaga / Notatka

Jeśli parametr Infinite jest określony przez millisecondsTimeout, ta metoda blokuje się na czas nieokreślony, chyba że posiadacz blokady wywoła Pulse lub PulseAll. Jeśli millisecondsTimeout równa się 0, wątek wywołujący Wait zwalnia blokadę, a następnie natychmiast przechodzi do gotowej kolejki w celu odzyskania blokady.

Obiekt wywołujący wykonuje Wait jednokrotnie, niezależnie od tego, ile razy Enter zostało wywołane dla określonego obiektu. Koncepcyjnie, metoda Wait przechowuje liczbę wywołań Enter na obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Podczas oczekiwania na ponowne uzyskanie obiektu, wywołujący blokuje się. Gdy obiekt wywołujący ponownie odwołuje blokadę, system wywołuje Enter tyle razy, ile razy 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 / Notatka

Zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, który 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.

PulseMetody , PulseAlli Wait muszą być wywoływane z zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się stanie, 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
Ź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 przechodzi 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 należy czekać.

timeout
TimeSpan

Reprezentująca TimeSpan ilość czasu oczekiwania przed wejściem wątku do gotowej kolejki.

Zwraca

true jeśli blokada została odzyskana przed upływem określonego czasu; false jeśli blokada została odzyskana po upływie określonego czasu. Metoda nie zwraca się, dopóki blokada nie zostanie ponownie zwrócona.

Atrybuty

Wyjątki

Parametr obj jest 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 (-1 milisekund) lub jest większa niż Int32.MaxValue.

Uwagi

Ta metoda nie zwraca się, dopóki nie odzyska blokady na wyłączność parametru obj .

Wątek, który obecnie jest właścicielem blokady określonego obiektu, 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 gwarantuje, że bieżący wątek nie blokuje się na czas nieokreślony, jeśli inny wątek zwolni blokadę bez uprzedniego wywołania metody Pulse lub 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ść zwracaną przez metodę Wait, aby określić, czy ponownie odblokowała przed przekroczeniem limitu czasu. Wątek może ocenić warunki, które spowodowały umieszczenie w oczekiwaniu, 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 do momentu, aż wątek, który posiada blokadę, wywoła PulseAll, lub jest następny w kolejce i wątek, który posiada blokadę, wywoła Pulse. timeout Jednak jeśli upłynie on, zanim inny wątek wywoła metodę Pulse lub PulseAll tego obiektu, pierwotny wątek zostanie przeniesiony do kolejki gotowych w celu odzyskania blokady.

Uwaga / Notatka

Jeśli dla parametru TimeSpan określono wartość reprezentującą timeout -1 milisekundy, ta metoda zostaje zablokowana na czas nieokreślony, chyba że posiadacz blokady wywoła Pulse lub PulseAll. Jeśli wartość timeout to 0 milisekund, wątek wywołujący Wait zwalnia blokadę, a następnie natychmiast przechodzi do kolejki gotowości, aby odzyskać blokadę.

Obiekt wywołujący wykonuje Wait jednokrotnie, niezależnie od tego, ile razy Enter zostało wywołane dla określonego obiektu. Koncepcyjnie, metoda Wait przechowuje liczbę wywołań Enter na obiekcie i wywołuje Exit tyle razy, ile jest to konieczne, aby w pełni zwolnić zablokowany obiekt. Podczas oczekiwania na ponowne uzyskanie obiektu, wywołujący blokuje się. Gdy obiekt wywołujący ponownie odwołuje blokadę, system wywołuje Enter tyle razy, ile razy 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 / Notatka

Zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, który 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.

PulseMetody , PulseAlli Wait muszą być wywoływane z zsynchronizowanego bloku kodu.

Uwagi dotyczące Pulse metody wyjaśniają, co się stanie, 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
Ź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 przechodzi do gotowej kolejki. Opcjonalnie zamyka domenę synchronizacji dla zsynchronizowanych kontekstów przed oczekiwaniem i następnie ponownie wyszukuje domenę.

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

Parametry

obj
Object

Obiekt, na którym należy czekać.

timeout
TimeSpan

Reprezentująca TimeSpan ilość czasu 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 odzyskana przed upływem określonego czasu; false jeśli blokada została odzyskana po upływie określonego czasu. Metoda nie zwraca się, dopóki blokada nie zostanie ponownie zwrócona.

Atrybuty

Wyjątki

Parametr obj jest null.

Wait nie jest wywoływany z 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() .

Parametr timeout jest ujemny i nie reprezentuje Infinite (-1 milisekundy) 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