Monitor.Wait Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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 Wait
metodę , 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 Wait
metodę , 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 Wait
metodę , 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.