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

Další informace o tomto rozhraní API naleznete v tématu Doplňkové poznámky k rozhraní API pro Monitor.Wait.

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

Další informace o tomto rozhraní API naleznete v tématu Doplňkové poznámky k rozhraní API pro Monitor.Wait.

Viz také

Platí pro