Sdílet prostřednictvím


Monitor.Wait Metoda

Definice

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

truek 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.

timeout
TimeSpan

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

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.

timeout
TimeSpan

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

exitContext
Boolean

trueukonč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.

Viz také

Platí pro