Monitor.Wait Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald.
Overloads
| Name | Description |
|---|---|
| Wait(Object) |
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. |
| Wait(Object, Int32) |
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. |
| Wait(Object, TimeSpan) |
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. |
| Wait(Object, Int32, Boolean) |
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. Met deze methode wordt ook aangegeven of het synchronisatiedomein voor de context (indien in een gesynchroniseerde context) wordt afgesloten voordat de wachttijd wordt afgesloten en daarna opnieuw wordt aangevraagd. |
| Wait(Object, TimeSpan, Boolean) |
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. Sluit desgewenst het synchronisatiedomein af voor de gesynchroniseerde context voordat de wacht wordt uitgevoerd en vraagt het domein daarna opnieuw aan. |
Wait(Object)
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald.
public:
static bool Wait(System::Object ^ obj);
public static bool Wait(object obj);
static member Wait : obj -> bool
Public Shared Function Wait (obj As Object) As Boolean
Parameters
- obj
- Object
Het object waarop moet worden gewacht.
Retouren
true als de aanroep is geretourneerd omdat de aanroeper de vergrendeling voor het opgegeven object opnieuw heeft aangevraagd. Deze methode retourneert niet als de vergrendeling niet opnieuw is vereist.
Uitzonderingen
De obj parameter is null.
De aanroepende thread is niet de eigenaar van de vergrendeling voor het opgegeven object.
De thread die wordt aangeroepen Wait , wordt later onderbroken vanuit de wachtstatus. Dit gebeurt wanneer een andere thread de methode van Interrupt() deze thread aanroept.
Opmerkingen
De thread die momenteel eigenaar is van de vergrendeling van het opgegeven object roept deze methode aan om het object vrij te geven, zodat een andere thread toegang heeft tot het object. De beller wordt geblokkeerd tijdens het opnieuw aanvragen van de vergrendeling. Deze methode wordt aangeroepen wanneer de aanroeper moet wachten op een statuswijziging die wordt uitgevoerd als gevolg van bewerkingen van een andere thread.
Wanneer een thread wordt aangeroepen Wait, wordt de vergrendeling van het object vrijgegeven en wordt de wachtwachtrij van het object ingevoerd. De volgende thread in de wachtrij gereed voor het object (indien aanwezig) verkrijgt de vergrendeling en heeft exclusief gebruik van het object. Alle threads die worden aangeroepen Wait , blijven in de wachtrij staan totdat ze een signaal ontvangen van Pulse of PulseAll, verzonden door de eigenaar van de vergrendeling. Als Pulse deze wordt verzonden, wordt alleen de thread aan het hoofd van de wachtrij beïnvloed. Als PulseAll het object wordt verzonden, worden alle threads die wachten op het object beïnvloed. Wanneer het signaal wordt ontvangen, verlaten een of meer threads de wachtrij en voeren ze de wachtrij gereed in. Een thread in de wachtrij gereed is toegestaan om de vergrendeling opnieuw te openen.
Deze methode retourneert wanneer de aanroepende thread de vergrendeling van het object opnieuw aanvraagt. Houd er rekening mee dat deze methode voor onbepaalde tijd blokkeert als de houder van het slot niet wordt aangeroepen Pulse of PulseAll.
De aanroeper voert Wait eenmaal uit, ongeacht het aantal keren dat Enter is aangeroepen voor het opgegeven object. Conceptueel slaat de Wait-methode het aantal keren op dat de aanroeper Enter op het object uitvoert en roept Exit zo vaak aan als nodig is om het vergrendelde object volledig vrij te geven. De aanroeper blokkeert vervolgens terwijl wordt gewacht tot het object opnieuw wordt heroverd. Wanneer de aanroeper de vergrendeling opnieuw verkrijgt, roept het systeem Enter zo vaak aan als nodig is om de opgeslagen Enter teller voor de aanroeper te herstellen. Het aanroepen Wait geeft alleen de vergrendeling voor het opgegeven object vrij. Als de aanroeper de eigenaar is van vergrendelingen op andere objecten, worden deze vergrendelingen niet vrijgegeven.
Houd er rekening mee dat een gesynchroniseerd object verschillende verwijzingen bevat, waaronder een verwijzing naar de thread die momenteel de vergrendeling bevat, een verwijzing naar de gereede wachtrij, die de threads bevat die gereed zijn om de vergrendeling te verkrijgen en een verwijzing naar de wachtwachtrij, die de threads bevat die wachten op melding van een wijziging in de status van het object.
De Pulse, PulseAllen Wait methoden moeten worden aangeroepen vanuit een gesynchroniseerd codeblok.
De opmerkingen voor de Pulse methode leggen uit wat er gebeurt als Pulse wordt aangeroepen terwijl er geen threads wachten.
Zie ook
Van toepassing op
Wait(Object, Int32)
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst.
public:
static bool Wait(System::Object ^ obj, int millisecondsTimeout);
public static bool Wait(object obj, int millisecondsTimeout);
static member Wait : obj * int -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer) As Boolean
Parameters
- obj
- Object
Het object waarop moet worden gewacht.
- millisecondsTimeout
- Int32
Het aantal milliseconden dat moet worden gewacht voordat de thread in de wachtrij wordt geplaatst.
Retouren
true indien de vergrendeling opnieuw is vereist voordat de opgegeven tijd is verstreken; false als de vergrendeling opnieuw is vereist nadat de opgegeven tijd is verstreken. De methode retourneert pas nadat de vergrendeling opnieuw is vereist.
Uitzonderingen
De obj parameter is null.
De aanroepende thread is niet de eigenaar van de vergrendeling voor het opgegeven object.
De thread die wordt aangeroepen Wait , wordt later onderbroken vanuit de wachtstatus. Dit gebeurt wanneer een andere thread de methode van Interrupt() deze thread aanroept.
De waarde van de millisecondsTimeout parameter is negatief en is niet gelijk aan Infinite.
Opmerkingen
Deze methode keert pas terug wanneer het een exclusieve vergrendeling op de parameter obj terugkrijgt.
De thread die momenteel eigenaar is van de vergrendeling van het opgegeven object roept deze methode aan om het object vrij te geven, zodat een andere thread toegang heeft tot het object. De beller wordt geblokkeerd tijdens het opnieuw aanvragen van de vergrendeling. Deze methode wordt aangeroepen wanneer de aanroeper moet wachten op een statuswijziging die wordt uitgevoerd als gevolg van bewerkingen van een andere thread.
De time-out zorgt ervoor dat de huidige thread niet voor onbepaalde tijd wordt geblokkeerd als een andere thread de vergrendeling loslaat zonder eerst de Pulse of PulseAll methode aan te roepen. De thread wordt ook verplaatst naar de gereed wachtrij, waarbij andere threads in de wachtrij worden overgeslagen, zodat de vergrendeling sneller kan worden hersteld. De thread kan de retourwaarde van de Wait methode testen om te bepalen of het de vergrendeling opnieuw heeft verkregen vóór de time-out. De thread kan de voorwaarden evalueren die ervoor zorgden dat het in de wachtstand ging en zo nodig de Wait methode opnieuw aanroepen.
Wanneer een thread wordt aangeroepen Wait, wordt de vergrendeling van het object vrijgegeven en wordt de wachtwachtrij van het object ingevoerd. De volgende thread in de wachtrij gereed voor het object (indien aanwezig) verkrijgt de vergrendeling en heeft exclusief gebruik van het object. De thread die Wait aanroept, blijft in de wachtrij totdat een thread die de vergrendeling vasthoudt PulseAll aanroept, of de thread is de volgende in de wachtrij en een thread die de vergrendeling vasthoudt Pulse aanroept. Als millisecondsTimeout verstrijkt voordat een andere thread de Pulse- of PulseAll-methode van dit object aanroept, wordt de oorspronkelijke thread naar de gereedwachtrij verplaatst om de vergrendeling te herstellen.
Note
Als Infinite is opgegeven voor de millisecondsTimeout parameter, blokkeert deze methode voor onbepaalde tijd tenzij de houder van de vergrendeling Pulse of PulseAll aanroept. Als millisecondsTimeout gelijk is aan 0, geeft de thread die Wait aanroept de vergrendeling vrij en gaat daarna onmiddellijk naar de gereed-wachtrij om de vergrendeling weer te verkrijgen.
De aanroeper voert Wait eenmaal uit, ongeacht het aantal keren dat Enter is aangeroepen voor het opgegeven object. Conceptueel slaat de Wait-methode het aantal keren op dat de aanroeper Enter op het object uitvoert en roept Exit zo vaak aan als nodig is om het vergrendelde object volledig vrij te geven. De aanroeper blokkeert vervolgens terwijl wordt gewacht tot het object opnieuw wordt heroverd. Wanneer de aanroeper de vergrendeling opnieuw verkrijgt, roept het systeem Enter zo vaak aan als nodig is om de opgeslagen Enter teller voor de aanroeper te herstellen. Het aanroepen Wait geeft alleen de vergrendeling voor het opgegeven object vrij. Als de aanroeper de eigenaar is van vergrendelingen op andere objecten, worden deze vergrendelingen niet vrijgegeven.
Note
Een gesynchroniseerd object bevat verschillende verwijzingen, waaronder een verwijzing naar de thread die momenteel de vergrendeling bevat, een verwijzing naar de gereede wachtrij, die de threads bevat die gereed zijn om de vergrendeling te verkrijgen en een verwijzing naar de wachtwachtrij, die de threads bevat die wachten op melding van een wijziging in de status van het object.
De Pulse, PulseAllen Wait methoden moeten worden aangeroepen vanuit een gesynchroniseerd codeblok.
De opmerkingen voor de Pulse methode leggen uit wat er gebeurt als Pulse wordt aangeroepen terwijl er geen threads wachten.
Zie ook
Van toepassing op
Wait(Object, TimeSpan)
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst.
public:
static bool Wait(System::Object ^ obj, TimeSpan timeout);
public static bool Wait(object obj, TimeSpan timeout);
static member Wait : obj * TimeSpan -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan) As Boolean
Parameters
- obj
- Object
Het object waarop moet worden gewacht.
- timeout
- TimeSpan
Een TimeSpan weergave van de hoeveelheid tijd die moet worden gewacht voordat de thread de wachtrij gereed heeft.
Retouren
true indien de vergrendeling opnieuw is vereist voordat de opgegeven tijd is verstreken; false als de vergrendeling opnieuw is vereist nadat de opgegeven tijd is verstreken. De methode retourneert pas nadat de vergrendeling opnieuw is vereist.
Uitzonderingen
De obj parameter is null.
De aanroepende thread is niet de eigenaar van de vergrendeling voor het opgegeven object.
De thread die wordt aangeroepen Wait , wordt later onderbroken vanuit de wachtstatus. Dit gebeurt wanneer een andere thread de methode van Interrupt() deze thread aanroept.
De waarde van de timeout parameter in milliseconden is negatief en vertegenwoordigt Infinite niet (-1 milliseconden) of is groter dan Int32.MaxValue.
Opmerkingen
Deze methode keert pas terug wanneer het een exclusieve vergrendeling op de parameter obj terugkrijgt.
De thread die momenteel eigenaar is van de vergrendeling van het opgegeven object roept deze methode aan om het object vrij te geven, zodat een andere thread toegang heeft tot het object. De beller wordt geblokkeerd tijdens het opnieuw aanvragen van de vergrendeling. Deze methode wordt aangeroepen wanneer de aanroeper moet wachten op een statuswijziging die wordt uitgevoerd als gevolg van bewerkingen van een andere thread.
De time-out zorgt ervoor dat de huidige thread niet voor onbepaalde tijd wordt geblokkeerd als een andere thread de vergrendeling loslaat zonder eerst de Pulse of PulseAll methode aan te roepen. De thread wordt ook verplaatst naar de gereed wachtrij, waarbij andere threads in de wachtrij worden overgeslagen, zodat de vergrendeling sneller kan worden hersteld. De thread kan de retourwaarde van de Wait methode testen om te bepalen of het de vergrendeling opnieuw heeft verkregen vóór de time-out. De thread kan de voorwaarden evalueren die ervoor zorgden dat het in de wachtstand ging en zo nodig de Wait methode opnieuw aanroepen.
Wanneer een thread wordt aangeroepen Wait, wordt de vergrendeling van het object vrijgegeven en wordt de wachtwachtrij van het object ingevoerd. De volgende thread in de wachtrij gereed voor het object (indien aanwezig) verkrijgt de vergrendeling en heeft exclusief gebruik van het object. De thread die Wait aanroept, blijft in de wachtrij totdat een thread die de vergrendeling vasthoudt PulseAll aanroept, of de thread is de volgende in de wachtrij en een thread die de vergrendeling vasthoudt Pulse aanroept. Als timeout verstrijkt voordat een andere thread de Pulse- of PulseAll-methode van dit object aanroept, wordt de oorspronkelijke thread naar de gereedwachtrij verplaatst om de vergrendeling te herstellen.
Note
Als een TimeSpan dat -1 milliseconde voorstelt voor de timeout parameter is opgegeven, blokkeert deze methode voor onbepaalde tijd, tenzij de houder van de vergrendeling Pulse of PulseAll aanroept. Als timeout 0 milliseconden is, laat de thread die Wait aanroept de vergrendeling los en treedt onmiddellijk toe tot de wachtrij om de vergrendeling opnieuw te verkrijgen.
De aanroeper voert Wait eenmaal uit, ongeacht het aantal keren dat Enter is aangeroepen voor het opgegeven object. Conceptueel slaat de Wait-methode het aantal keren op dat de aanroeper Enter op het object uitvoert en roept Exit zo vaak aan als nodig is om het vergrendelde object volledig vrij te geven. De aanroeper blokkeert vervolgens terwijl wordt gewacht tot het object opnieuw wordt heroverd. Wanneer de aanroeper de vergrendeling opnieuw verkrijgt, roept het systeem Enter zo vaak aan als nodig is om de opgeslagen Enter teller voor de aanroeper te herstellen. Het aanroepen Wait geeft alleen de vergrendeling voor het opgegeven object vrij. Als de aanroeper de eigenaar is van vergrendelingen op andere objecten, worden deze vergrendelingen niet vrijgegeven.
Note
Een gesynchroniseerd object bevat verschillende verwijzingen, waaronder een verwijzing naar de thread die momenteel de vergrendeling bevat, een verwijzing naar de gereede wachtrij, die de threads bevat die gereed zijn om de vergrendeling te verkrijgen en een verwijzing naar de wachtwachtrij, die de threads bevat die wachten op melding van een wijziging in de status van het object.
De Pulse, PulseAllen Wait methoden moeten worden aangeroepen vanuit een gesynchroniseerd codeblok.
De opmerkingen voor de Pulse methode leggen uit wat er gebeurt als Pulse wordt aangeroepen terwijl er geen threads wachten.
Zie ook
Van toepassing op
Wait(Object, Int32, Boolean)
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. Met deze methode wordt ook aangegeven of het synchronisatiedomein voor de context (indien in een gesynchroniseerde context) wordt afgesloten voordat de wachttijd wordt afgesloten en daarna opnieuw wordt aangevraagd.
public:
static bool Wait(System::Object ^ obj, int millisecondsTimeout, bool exitContext);
public static bool Wait(object obj, int millisecondsTimeout, bool exitContext);
static member Wait : obj * int * bool -> bool
Public Shared Function Wait (obj As Object, millisecondsTimeout As Integer, exitContext As Boolean) As Boolean
Parameters
- obj
- Object
Het object waarop moet worden gewacht.
- millisecondsTimeout
- Int32
Het aantal milliseconden dat moet worden gewacht voordat de thread in de wachtrij wordt geplaatst.
- exitContext
- Boolean
true om het synchronisatiedomein voor de context (indien in een gesynchroniseerde context) vóór de wachttijd af te sluiten en opnieuw op te vragen; anders, false.
Retouren
true indien de vergrendeling opnieuw is vereist voordat de opgegeven tijd is verstreken; false als de vergrendeling opnieuw is vereist nadat de opgegeven tijd is verstreken. De methode retourneert pas nadat de vergrendeling opnieuw is vereist.
Uitzonderingen
De obj parameter is null.
Wait wordt niet aangeroepen vanuit een gesynchroniseerd codeblok.
De thread die wordt aangeroepen Wait , wordt later onderbroken vanuit de wachtstatus. Dit gebeurt wanneer een andere thread de methode van Interrupt() deze thread aanroept.
De waarde van de millisecondsTimeout parameter is negatief en is niet gelijk aan Infinite.
Opmerkingen
Zie Aanvullende API-opmerkingen voor Monitor.Wait voor meer informatie over deze API.
Zie ook
Van toepassing op
Wait(Object, TimeSpan, Boolean)
Hiermee wordt de vergrendeling voor een object vrijgegeven en wordt de huidige thread geblokkeerd totdat de vergrendeling opnieuw wordt opgehaald. Als het opgegeven time-outinterval is verstreken, wordt de thread in de wachtrij geplaatst. Sluit desgewenst het synchronisatiedomein af voor de gesynchroniseerde context voordat de wacht wordt uitgevoerd en vraagt het domein daarna opnieuw aan.
public:
static bool Wait(System::Object ^ obj, TimeSpan timeout, bool exitContext);
public static bool Wait(object obj, TimeSpan timeout, bool exitContext);
static member Wait : obj * TimeSpan * bool -> bool
Public Shared Function Wait (obj As Object, timeout As TimeSpan, exitContext As Boolean) As Boolean
Parameters
- obj
- Object
Het object waarop moet worden gewacht.
- timeout
- TimeSpan
Een TimeSpan weergave van de hoeveelheid tijd die moet worden gewacht voordat de thread de wachtrij gereed heeft.
- exitContext
- Boolean
true om het synchronisatiedomein voor de context (indien in een gesynchroniseerde context) vóór de wachttijd af te sluiten en opnieuw op te vragen; anders, false.
Retouren
true indien de vergrendeling opnieuw is vereist voordat de opgegeven tijd is verstreken; false als de vergrendeling opnieuw is vereist nadat de opgegeven tijd is verstreken. De methode retourneert pas nadat de vergrendeling opnieuw is vereist.
Uitzonderingen
De obj parameter is null.
Wait wordt niet aangeroepen vanuit een gesynchroniseerd codeblok.
De thread die Wacht aanroept, wordt later onderbroken vanuit de wachtstatus. Dit gebeurt wanneer een andere thread de methode van Interrupt() deze thread aanroept.
De timeout parameter is negatief en vertegenwoordigt Infinite niet (-1 milliseconden) of is groter dan Int32.MaxValue.
Opmerkingen
Zie Aanvullende API-opmerkingen voor Monitor.Wait voor meer informatie over deze API.