Monitor.Wait Metoda

Definice

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí.

Přetížení

Name Description
Wait(Object, Int32, Boolean)

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty. Tato metoda také určuje, zda je synchronizační doména pro kontext (pokud v synchronizovaovém kontextu) ukončena před čekáním a následně se znovu zobrazí.

Wait(Object)

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí.

Wait(Object, Int32)

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty.

Wait(Object, TimeSpan)

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty.

Wait(Object, TimeSpan, Boolean)

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty. Volitelně ukončí synchronizační doménu pro synchronizovaný kontext před čekáním a následně ji znovu vyžádá.

Wait(Object, Int32, Boolean)

Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty. Tato metoda také určuje, zda je synchronizační doména pro kontext (pokud v synchronizovaovém kontextu) ukončena před čekáním a následně se znovu zobrazí.

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

Objekt, na kterém se má čekat.

millisecondsTimeout
Int32

Počet milisekund, které se mají počkat, než vlákno přejde do připravené fronty.

exitContext
Boolean

trueukončit a znovu požádat synchronizační doménu pro kontext (pokud je v synchronizovaném kontextu) před čekáním; v opačném případě . false

Návraty

true byl-li zámek znovu vyzván před uplynutím zadaného času; false pokud se zámek po uplynutí zadaného času znovu vynutil. Metoda se nevrátí, dokud se zámek neobsadí.

Atributy

Výjimky

Parametr obj je null.

Wait není vyvolána z synchronizovaného bloku kódu.

Vlákno, které se vyvolá Wait , se později přeruší ze stavu čekání. K tomu dochází, když jiné vlákno volá metodu Interrupt() tohoto vlákna.

Hodnota parametru millisecondsTimeout je záporná a nerovná se Infinite.

Poznámky

metoda Wait(Object, Int32, Boolean)

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Když vlákno zavolá Wait, uvolní zámek a přejde do čekající fronty. V tomto okamžiku může další vlákno v připravené frontě (pokud existuje) převzít kontrolu nad zámkem. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud však uplyne millisecondsTimeout dříve, než jiné vlákno vyvolá metodu tohoto objektu Pulse nebo PulseAll, původní vlákno se přesune do připravené fronty, aby znovu získalo zámek.

Note

Je-li parametr Infinite zadán pro millisecondsTimeout, tato metoda blokuje neomezeně dlouho, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud millisecondsTimeout se rovná 0, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do fronty připravenosti, aby zámek znovu získalo.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

metoda Wait(Object, TimeSpan, Boolean)

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Když vlákno zavolá Wait, uvolní zámek a přejde do čekající fronty. V tomto okamžiku může další vlákno v připravené frontě (pokud existuje) převzít kontrolu nad zámkem. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud uplynou milisekundy timeout předtím, než jiné vlákno vyvolá metodu Pulse nebo PulseAll tohoto objektu, původní vlákno se přesune do fronty připravenosti, aby znovu získalo zámek.

Note

Pokud je pro parametr TimeSpan zadána reprezentace timeout jako -1 milisekund, tato metoda zablokuje na neurčito, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud timeout je 0 milisekund, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do připravené fronty připravenosti, aby znovu získalo zámek.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

Opusťte kontext.

Parametr exitContext nemá žádný vliv, pokud Wait metoda není volána z nedefault spravovaného kontextu. K tomu může dojít, pokud se vlákno nachází ve volání instance třídy, která je odvozena z ContextBoundObject. I když aktuálně spouštíte metodu ve třídě, která není odvozena od ContextBoundObject, jako je String, můžete se nacházet mimo výchozí kontext, pokud je ContextBoundObject ve vašem zásobníku v aktuální doméně aplikace.

Když se váš kód spouští v nevýchozím kontextu, určení true pro exitContext způsobí, že vlákno opustí nevýchozí řízený kontext (to znamená přechod na výchozí kontext) před spuštěním metody Wait. Po dokončení volání Wait metody se vrátí do původního nedefaultnímu kontextu.

To může být užitečné v případě, že na kontextové třídě je aplikován atribut SynchronizationAttribute. V takovém případě jsou všechna volání členů třídy automaticky synchronizována a synchronizační doména je celý text kódu pro třídu. Pokud kód v zásobníku volání člena volá metodu Wait a specifikuje true pro exitContext, vlákno ukončí synchronizační doménu, což umožňuje vláknu, které je blokované při volání libovolného člena objektu, pokračovat. Když metoda Wait vrátí, vlákno, které provedlo volání, musí počkat na opětovné zadání synchronizační domény.

Viz také

Platí pro

Wait(Object)

Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí.

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

Objekt, na kterém se má čekat.

Návraty

true pokud volání vrátilo, protože volající znovu inquired zámek pro zadaný objekt. Tato metoda se nevrátí, pokud zámek není znovu vyzván.

Atributy

Výjimky

Parametr obj je null.

Volající vlákno nevlastní zámek pro zadaný objekt.

Vlákno, které se vyvolá Wait , se později přeruší ze stavu čekání. K tomu dochází, když jiné vlákno volá metodu Interrupt() tohoto vlákna.

Poznámky

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Při volání Waitvlákna uvolní zámek objektu a přejde do fronty čekání objektu. Další vlákno ve frontě připravené pro objekt (pokud existuje) získá zámek a má výhradní použití objektu. Všechna vlákna, která volají Wait , zůstanou ve frontě čekání, dokud neobdrží signál od Pulse nebo PulseAll, odeslané vlastníkem zámku. Pokud Pulse je odesláno, bude ovlivněno pouze vlákno v hlavě čekající fronty. Pokud PulseAll je odesláno, jsou ovlivněna všechna vlákna, která čekají na objekt. Při přijetí signálu opustí jedno nebo více vláken čekající frontu a vstoupí do připravené fronty. Vlákno ve frontě připravené je povoleno znovu získat zámek.

Tato metoda se vrátí, když volající vlákno znovu vyvolá zámek objektu. Všimněte si, že tato metoda blokuje neomezeně dlouhou dobu, pokud držitel zámku nezavolá Pulse nebo PulseAll.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Všimněte si, že synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

Viz také

Platí pro

Wait(Object, Int32)

Zdroj:
Monitor.CoreCLR.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.CoreCLR.cs
Zdroj:
Monitor.CoreCLR.cs
Zdroj:
Monitor.CoreCLR.cs

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty.

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

Objekt, na kterém se má čekat.

millisecondsTimeout
Int32

Počet milisekund, které se mají počkat, než vlákno přejde do připravené fronty.

Návraty

true byl-li zámek znovu vyzván před uplynutím zadaného času; false pokud se zámek po uplynutí zadaného času znovu vynutil. Metoda se nevrátí, dokud se zámek neobsadí.

Atributy

Výjimky

Parametr obj je null.

Volající vlákno nevlastní zámek pro zadaný objekt.

Vlákno, které se vyvolá Wait , se později přeruší ze stavu čekání. K tomu dochází, když jiné vlákno volá metodu Interrupt() tohoto vlákna.

Hodnota parametru millisecondsTimeout je záporná a nerovná se Infinite.

Poznámky

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Při volání Waitvlákna uvolní zámek objektu a přejde do fronty čekání objektu. Další vlákno ve frontě připravené pro objekt (pokud existuje) získá zámek a má výhradní použití objektu. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud však uplyne millisecondsTimeout dříve, než jiné vlákno vyvolá metodu tohoto objektu Pulse nebo PulseAll, původní vlákno se přesune do připravené fronty, aby znovu získalo zámek.

Note

Je-li parametr Infinite zadán pro millisecondsTimeout, tato metoda blokuje neomezeně dlouho, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud millisecondsTimeout se rovná 0, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do fronty připravenosti, aby zámek znovu získalo.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

Viz také

Platí pro

Wait(Object, TimeSpan)

Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty.

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

Objekt, na kterém se má čekat.

timeout
TimeSpan

Představuje TimeSpan dobu čekání, než vlákno přejde do připravené fronty.

Návraty

true byl-li zámek znovu vyzván před uplynutím zadaného času; false pokud se zámek po uplynutí zadaného času znovu vynutil. Metoda se nevrátí, dokud se zámek neobsadí.

Atributy

Výjimky

Parametr obj je null.

Volající vlákno nevlastní zámek pro zadaný objekt.

Vlákno, které se vyvolá Wait , se později přeruší ze stavu čekání. K tomu dochází, když jiné vlákno volá metodu Interrupt() tohoto vlákna.

Hodnota parametru timeout v milisekundách je záporná a nepředstavuje Infinite (-1 milisekund) nebo je větší než Int32.MaxValue.

Poznámky

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Při volání Waitvlákna uvolní zámek objektu a přejde do fronty čekání objektu. Další vlákno ve frontě připravené pro objekt (pokud existuje) získá zámek a má výhradní použití objektu. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud však uplyne timeout dříve, než jiné vlákno vyvolá metodu tohoto objektu Pulse nebo PulseAll, původní vlákno se přesune do připravené fronty, aby znovu získalo zámek.

Note

Pokud je pro parametr TimeSpan zadána reprezentace timeout jako -1 milisekund, tato metoda zablokuje na neurčito, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud timeout je 0 milisekund, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do připravené fronty připravenosti, aby znovu získalo zámek.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

Viz také

Platí pro

Wait(Object, TimeSpan, Boolean)

Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs
Zdroj:
Monitor.cs

Uvolní zámek objektu a zablokuje aktuální vlákno, dokud ho znovu nenasadí. Pokud zadaný interval časového limitu uplynul, vlákno přejde do připravené fronty. Volitelně ukončí synchronizační doménu pro synchronizovaný kontext před čekáním a následně ji znovu vyžádá.

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

Objekt, na kterém se má čekat.

timeout
TimeSpan

Představuje TimeSpan dobu čekání, než vlákno přejde do připravené fronty.

exitContext
Boolean

trueukončit a znovu požádat synchronizační doménu pro kontext (pokud je v synchronizovaném kontextu) před čekáním; v opačném případě . false

Návraty

true byl-li zámek znovu vyzván před uplynutím zadaného času; false pokud se zámek po uplynutí zadaného času znovu vynutil. Metoda se nevrátí, dokud se zámek neobsadí.

Atributy

Výjimky

Parametr obj je null.

Wait není vyvolána z synchronizovaného bloku kódu.

Vlákno, které vyvolá čekání, se později přeruší ze stavu čekání. K tomu dochází, když jiné vlákno volá metodu Interrupt() tohoto vlákna.

Parametr timeout je záporný a nepředstavuje Infinite (-1 milisekund) nebo je větší než Int32.MaxValue.

Poznámky

metoda Wait(Object, Int32, Boolean)

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Když vlákno zavolá Wait, uvolní zámek a přejde do čekající fronty. V tomto okamžiku může další vlákno v připravené frontě (pokud existuje) převzít kontrolu nad zámkem. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud však uplyne millisecondsTimeout dříve, než jiné vlákno vyvolá metodu tohoto objektu Pulse nebo PulseAll, původní vlákno se přesune do připravené fronty, aby znovu získalo zámek.

Note

Je-li parametr Infinite zadán pro millisecondsTimeout, tato metoda blokuje neomezeně dlouho, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud millisecondsTimeout se rovná 0, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do fronty připravenosti, aby zámek znovu získalo.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

metoda Wait(Object, TimeSpan, Boolean)

Tato metoda se nevrátí, dokud nezíská výhradní zámek na parametru obj.

Vlákno, které aktuálně vlastní zámek u zadaného objektu, vyvolá tuto metodu, aby uvolnilo objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je blokován při čekání na opětovné získání zámku. Tato metoda se volá, když volající potřebuje počkat na změnu stavu, která nastane v důsledku operací jiného vlákna.

Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně dlouho, pokud jiné vlákno uvolní zámek bez prvního volání Pulse nebo PulseAll metody. Vlákno také přesune do připravené fronty, obcházejíc tím další vlákna před ním ve frontě čekání, aby mohlo dříve znovu získat zámek. Vlákno může otestovat návratovou hodnotu metody Wait a určit, zda zámek znovu získalo před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily, že vstoupilo do čekání, a v případě potřeby znovu zavolat metodu Wait.

Když vlákno zavolá Wait, uvolní zámek a přejde do čekající fronty. V tomto okamžiku může další vlákno v připravené frontě (pokud existuje) převzít kontrolu nad zámkem. Vlákno, které vyvolalo Wait , zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek vyvolá PulseAll, nebo je to další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud uplynou milisekundy timeout předtím, než jiné vlákno vyvolá metodu Pulse nebo PulseAll tohoto objektu, původní vlákno se přesune do fronty připravenosti, aby znovu získalo zámek.

Note

Pokud je pro parametr TimeSpan zadána reprezentace timeout jako -1 milisekund, tato metoda zablokuje na neurčito, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud timeout je 0 milisekund, vlákno, které volá Wait, uvolní zámek a okamžitě vstoupí do připravené fronty připravenosti, aby znovu získalo zámek.

Volající se spustí Wait jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait ukládá počet, kolikrát volající vyvolal Enter na objektu, a volá Exit tolikrát, kolikrát je potřeba k úplnému uvolnění uzamčeného objektu. Volající pak zablokuje svojí činnost a čeká na opětovné získání objektu. Když volající znovu získá zámek, systém zavolá Enter tolikrát, kolikrát je nutné k obnovení uložené hodnoty Enter. Volání Wait uvolní zámek pouze pro zadaný objekt. Pokud je volající vlastníkem zámků u jiných objektů, tyto zámky se nevyvolají.

Note

Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkaz na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

Poznámky k metodě Pulse vysvětlují, co se stane, když se Pulse volá, když žádná vlákna nečekají.

Opusťte kontext.

Parametr exitContext nemá žádný vliv, pokud Wait metoda není volána z nedefault spravovaného kontextu. K tomu může dojít, pokud se vlákno nachází ve volání instance třídy, která je odvozena z ContextBoundObject. I když aktuálně spouštíte metodu ve třídě, která není odvozena od ContextBoundObject, jako je String, můžete se nacházet mimo výchozí kontext, pokud je ContextBoundObject ve vašem zásobníku v aktuální doméně aplikace.

Když se váš kód spouští v nevýchozím kontextu, určení true pro exitContext způsobí, že vlákno opustí nevýchozí řízený kontext (to znamená přechod na výchozí kontext) před spuštěním metody Wait. Po dokončení volání Wait metody se vrátí do původního nedefaultnímu kontextu.

To může být užitečné v případě, že na kontextové třídě je aplikován atribut SynchronizationAttribute. V takovém případě jsou všechna volání členů třídy automaticky synchronizována a synchronizační doména je celý text kódu pro třídu. Pokud kód v zásobníku volání člena volá metodu Wait a specifikuje true pro exitContext, vlákno ukončí synchronizační doménu, což umožňuje vláknu, které je blokované při volání libovolného člena objektu, pokračovat. Když metoda Wait vrátí, vlákno, které provedlo volání, musí počkat na opětovné zadání synchronizační domény.

Viz také

Platí pro