Monitor.Wait Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud zámek znovu nenasadí.
Přetížení
Wait(Object, Int32, Boolean) |
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. Pokud uplyne zadaný interval časového limitu, vlákno přejde do připravené fronty. Tato metoda také určuje, zda se doména synchronizace pro kontext (pokud je v synchronizovaném kontextu) před čekáním ukončena a následně znovu požadovaná. |
Wait(Object) |
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. |
Wait(Object, Int32) |
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. Pokud uplyne zadaný interval časového limitu, vlákno přejde do připravené fronty. |
Wait(Object, TimeSpan) |
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. Pokud uplyne zadaný interval časového limitu, vlákno přejde do připravené fronty. |
Wait(Object, TimeSpan, Boolean) |
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. Pokud uplyne zadaný interval časového limitu, vlákno přejde do připravené fronty. Volitelně ukončí synchronizační doménu pro synchronizovaný kontext před čekáním a potom doménu znovu vyhledá. |
Wait(Object, Int32, Boolean)
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá. Pokud uplyne zadaný interval časového limitu, vlákno přejde do připravené fronty. Tato metoda také určuje, zda se doména synchronizace pro kontext (pokud je v synchronizovaném kontextu) před čekáním ukončena a následně znovu požadovaná.
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
Objekt, na který se má čekat.
- millisecondsTimeout
- Int32
Počet milisekund, které se mají čekat, než vlákno přejde do připravené fronty.
- exitContext
- Boolean
true
k ukončení a opětovnému získání synchronizační domény 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 vyžádřen před uplynutím stanoveného času; false
pokud se zámek znovu získal po uplynutí zadaného času. Metoda nevrátí, dokud se zámek znovu nevyžaduje.
- Atributy
Výjimky
Parametr obj
je null
.
Wait
není vyvolán ze synchronizovaného bloku kódu.
Vlákno, které vyvolá Wait
, je později přerušeno 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 hodnotě Infinite.
Poznámky
Další informace o tomto rozhraní API najdete 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
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud se zámek znovu nezažádá.
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ý se má čekat.
Návraty
true
pokud se volání vrátilo, protože volající znovu vyžádá zámek pro zadaný objekt. Tato metoda nevrátí, pokud se zámek znovu nevyžaduje.
- Atributy
Výjimky
Parametr obj
je null
.
Volající vlákno nevlastní zámek pro zadaný objekt.
Vlákno, které vyvolá Wait
, je později přerušeno 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 na zadaném objektu vyvolá tuto metodu, aby se uvolnil objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je zablokovaný 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, ke které dojde v důsledku operací jiného vlákna.
Když vlákno zavolá Wait
, uvolní zámek objektu a přejde do čekající fronty objektu. Další vlákno ve frontě připraveného objektu (pokud existuje) získá zámek a má výhradní použití objektu. Všechna vlákna, která volají Wait
, zůstávají v čekající frontě, dokud neobdrží signál z Pulse nebo PulseAll, který odešle vlastník zámku. Pokud Pulse
se odešle, bude ovlivněno pouze vlákno v čele čekající fronty. Pokud PulseAll
je odeslán, jsou ovlivněna všechna vlákna, která čekají na objekt. Po přijetí signálu jedno nebo více vláken opustí frontu čekání a vstoupí do připravené fronty. Vlákno v připravené frontě může zámek znovu získat.
Tato metoda vrátí, když volající vlákno znovu požaduje zámek objektu. Všimněte si, že tato metoda blokuje neomezeně, pokud držitel zámku nevolá Pulse
nebo PulseAll
.
Volající provede Wait
jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait
ukládá počet volání volajícího Enter
na objektu a vyvolá Exit
tolikrát, kolikrát je to nutné k úplnému uvolnění uzamčeného objektu. Volající poté zablokuje při čekání na opětovné získání objektu. Když volající znovu vyžaduje zámek, systém volá Enter
tolikrát, kolikrát je to nutné k obnovení uloženého Enter
počtu pro volajícího. 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 neuvolní.
Všimněte si, že synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkazu na frontu připraveno, která obsahují vlákna připravená k získání zámku, a odkaz na frontu čekání, která obsahuje vlákna, která čekají na oznámení o změně stavu objektu.
Metody Pulse, PulseAlla Wait
musí být vyvolány z synchronizovaného bloku kódu.
Poznámky k Pulse metodě vysvětlují, co se stane, když Pulse je volána, když nečekají žádná vlákna.
Viz také
Platí pro
Wait(Object, Int32)
- Zdroj:
- Monitor.CoreCLR.cs
- Zdroj:
- Monitor.CoreCLR.cs
- Zdroj:
- Monitor.CoreCLR.cs
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud zámek znovu nenasadí. Pokud zadaný interval časového limitu uplyne, vlákno přejde do fronty připravené.
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ý se má čekat.
- millisecondsTimeout
- Int32
Počet milisekund, které se mají čekat, než vlákno přejde do připravené fronty.
Návraty
true
byl-li zámek znovu vynutil před uplynutím stanoveného času; false
pokud byl zámek znovu uvolněn po uplynutí zadaného času. Metoda nevrací, dokud se zámek znovu nevyžaduje.
- Atributy
Výjimky
Parametr obj
je null
.
Volající vlákno nevlastní zámek pro zadaný objekt.
Vlákno, které vyvolá Wait
, je později přerušeno 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 hodnotě Infinite.
Poznámky
Tato metoda nevrací, dokud nevyžádá výhradní zámek parametru obj
.
Vlákno, které aktuálně vlastní zámek na zadaném objektu vyvolá tuto metodu, aby se uvolnil objekt, aby k němu mohlo přistupovat jiné vlákno. Volající je zablokovaný 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, ke které dojde v důsledku operací jiného vlákna.
Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně, pokud jiné vlákno uvolní zámek bez prvního volání Pulse metody nebo PulseAll . Také přesune vlákno do připravené fronty a obchází další vlákna, která jsou před ním ve frontě čekání, aby mohl zámek znovu získat dříve. Vlákno může testovat návratovou Wait hodnotu metody a zjistit, jestli se zámek znovu vynutil 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 objektu a přejde do čekající fronty objektu. Další vlákno ve frontě připraveného objektu (pokud existuje) získá zámek a má výhradní použití objektu. Vlákno, které se vyvolalo Wait
, zůstává ve frontě čekání, dokud buď vlákno, které obsahuje zámek, nevolá PulseAll, nebo je další ve frontě a vlákno, které obsahuje zámek, vyvolá Pulse. Pokud však uplynou dříve, millisecondsTimeout
než jiné vlákno vyvolá tento objekt Pulse nebo PulseAll metodu, původní vlákno se přesune do připravené fronty, aby znovu získal zámek.
Poznámka
Pokud Infinite je zadán pro millisecondsTimeout
parametr, tato metoda blokuje neomezeně dlouho, pokud držitel zámku nevolá Pulse nebo PulseAll. Pokud millisecondsTimeout
se rovná 0, vlákno, které volá Wait
, uvolní zámek a okamžitě vstoupí do připravené fronty, aby zámek znovu získal.
Volající provede Wait
jednou bez ohledu na počet vyvolání Enter zadaného objektu. Koncepčně metoda Wait
ukládá počet volání volajícího Enter na objektu a vyvolá Exit tolikrát, kolikrát je to nutné k úplnému uvolnění uzamčeného objektu. Volající poté zablokuje při čekání na opětovné získání objektu. Když volající znovu vyžaduje zámek, systém volá Enter tolikrát, kolikrát je to nutné k obnovení uloženého Enter počtu pro volajícího. 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 neuvolní.
Poznámka
Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkazu 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ě stavu objektu.
Metody Pulse, PulseAlla Wait
musí být vyvolány z synchronizovaného bloku kódu.
Poznámky k Pulse metodě vysvětlují, co se stane, pokud Pulse je volána, když nečekají žádná vlákna.
Viz také
Platí pro
Wait(Object, TimeSpan)
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud zámek znovu nenasadí. Pokud zadaný interval časového limitu uplyne, vlákno přejde do fronty připravené.
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ý chcete čekat.
Návraty
true
byl-li zámek znovu vynutil před uplynutím stanoveného času; false
pokud byl zámek znovu uvolněn po uplynutí zadaného času. Metoda nevrací, dokud se zámek znovu nevyžaduje.
- Atributy
Výjimky
Parametr obj
je null
.
Volající vlákno nevlastní zámek pro zadaný objekt.
Vlákno, které vyvolá Wait
, je později přerušeno 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 milisekundu) nebo je větší než Int32.MaxValue.
Poznámky
Tato metoda nevrací, dokud znovu nenahradí výhradní zámek parametru obj
.
Vlákno, které aktuálně vlastní zámek na zadaný objekt vyvolá tuto metodu za účelem uvolnění objektu tak, aby k němu mohlo přistupovat jiné vlákno. Volající je zablokovaný při čekání na opětovné získání zámku. Tato metoda je volána, když volající potřebuje čekat na změnu stavu, ke které dojde v důsledku operací jiného vlákna.
Časový limit zajišťuje, že aktuální vlákno neblokuje neomezeně, pokud jiné vlákno uvolní zámek bez prvního volání Pulse metody nebo PulseAll . Také přesune vlákno do připravené fronty a vynechá ostatní vlákna, která jsou před ním ve frontě čekání, aby mohlo zámek znovu získat dříve. Vlákno může testovat návratovou Wait hodnotu metody k určení, zda znovu požadovaná zámek před vypršením časového limitu. Vlákno může vyhodnotit podmínky, které způsobily jeho zadání čekání, a v případě potřeby znovu zavolat metodu Wait .
Když vlákno volá Wait
, uvolní zámek objektu a přejde do čekající fronty objektu. Další vlákno v připravené frontě objektu (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 další ve frontě a vlákno, které obsahuje zámek vyvolá Pulse. Pokud však uplynou dříve, timeout
než jiné vlákno vyvolá tento objekt Pulse nebo PulseAll metodu, původní vlákno se přesune do fronty připraveno, aby znovu získal zámek.
Poznámka
TimeSpan Pokud je pro timeout
parametr zadán parametr představující -1 milisekund, tato metoda neurčitě blokuje, pokud držitel zámku nezavolá Pulse nebo PulseAll. Pokud timeout
je 0 milisekund, vlákno, které volá Wait
zámek, uvolní a pak okamžitě vstoupí do fronty připraveno, aby zámek znovu získal.
Volající provede Wait
jednou, bez ohledu na počet Enter volání pro zadaný objekt. Koncepčně metoda Wait
ukládá počet volání volajícího Enter na objektu a vyvolá Exit tolikrát, kolikrát je to nutné k úplnému uvolnění uzamčeného objektu. Volající pak při čekání na opětovné získání objektu zablokuje blokování. Když volající zámek znovu vyžaduje, systém volá Enter tolikrát, kolikrát je to nutné k obnovení uloženého Enter počtu pro volajícího. 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 neuvolní.
Poznámka
Synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkazu 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ě stavu objektu.
Metody Pulse, PulseAlla Wait
musí být vyvolány z synchronizovaného bloku kódu.
Poznámky k Pulse metodě vysvětlují, co se stane, pokud Pulse je volána, když nečekají žádná vlákna.
Viz také
Platí pro
Wait(Object, TimeSpan, Boolean)
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
- Zdroj:
- Monitor.cs
Uvolní zámek objektu a zablokuje aktuální vlákno, dokud zámek znovu nenasadí. Pokud zadaný interval časového limitu uplyne, vlákno přejde do fronty připravené. Volitelně ukončí synchronizační doménu pro synchronizovaný kontext před čekáním a potom doménu znovu vyhledá.
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
Objekt, na který chcete čekat.
- exitContext
- Boolean
true
ukončit a znovu vyžádat synchronizační doménu pro kontext (pokud je v synchronizované kontextu) před čekáním; v opačném případě . false
Návraty
true
byl-li zámek znovu vynutil před uplynutím stanoveného času; false
pokud byl zámek znovu uvolněn po uplynutí zadaného času. Metoda nevrací, dokud se zámek znovu nevyžaduje.
- Atributy
Výjimky
Parametr obj
je null
.
Wait
není vyvolána z synchronizovaného bloku kódu.
Vlákno, které vyvolá wait, je později přerušeno 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 milisekundu) nebo je větší než Int32.MaxValue.
Poznámky
Další informace o tomto rozhraní API najdete v tématu Doplňkové poznámky k rozhraní API pro Monitor.Wait.