Monitor.Wait Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird.
Überlädt
| Name | Beschreibung |
|---|---|
| Wait(Object, Int32, Boolean) |
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. Diese Methode gibt auch an, ob die Synchronisierungsdomäne für den Kontext (wenn in einem synchronisierten Kontext) vor dem Warten beendet und danach erneut abgerufen wird. |
| Wait(Object) |
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. |
| Wait(Object, Int32) |
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. |
| Wait(Object, TimeSpan) |
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. |
| Wait(Object, TimeSpan, Boolean) |
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. Beendet optional die Synchronisierungsdomäne für den synchronisierten Kontext, bevor die Wartezeit gewartet und die Domäne danach erneut abgerufen wird. |
Wait(Object, Int32, Boolean)
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. Diese Methode gibt auch an, ob die Synchronisierungsdomäne für den Kontext (wenn in einem synchronisierten Kontext) vor dem Warten beendet und danach erneut abgerufen wird.
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
Parameter
- obj
- Object
Das Objekt, auf das gewartet werden soll.
- millisecondsTimeout
- Int32
Die Anzahl der Millisekunden, die gewartet werden sollen, bevor der Thread die bereite Warteschlange eingibt.
- exitContext
- Boolean
trueum die Synchronisierungsdomäne für den Kontext (sofern in einem synchronisierten Kontext) vor dem Warten zu beenden und erneut zu erhalten; andernfalls . false
Gibt zurück
true wenn die Sperre vor ablaufen der angegebenen Zeit erneut abgerufen wurde; false wenn die Sperre nach ablaufen der angegebenen Zeit erneut abgerufen wurde. Die Methode wird erst zurückgegeben, wenn die Sperre erneut verwendet wird.
- Attribute
Ausnahmen
Der obj Parameter ist null.
Wait wird nicht innerhalb eines synchronisierten Codeblocks aufgerufen.
Der aufgerufene Wait Thread wird später vom Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Methode dieses Threads Interrupt() aufruft.
Der Wert des millisecondsTimeout Parameters ist negativ und ist nicht gleich Infinite.
Hinweise
Weitere Informationen zu dieser API finden Sie in den ergänzenden API-Hinweisen für Monitor.Wait.
Weitere Informationen
Gilt für:
Wait(Object)
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird.
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
Parameter
- obj
- Object
Das Objekt, auf das gewartet werden soll.
Gibt zurück
true wenn der zurückgegebene Aufruf, weil der Aufrufer die Sperre für das angegebene Objekt erneut abruft. Diese Methode wird nicht zurückgegeben, wenn die Sperre nicht erneut verwendet wird.
- Attribute
Ausnahmen
Der obj Parameter ist null.
Der aufrufende Thread besitzt nicht die Sperre für das angegebene Objekt.
Der aufgerufene Wait Thread wird später vom Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Methode dieses Threads Interrupt() aufruft.
Hinweise
Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre wiederzuerlangen. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die aufgrund der Vorgänge eines anderen Threads auftritt.
Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und gibt die Wartewarteschlange des Objekts ein. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) erhält die Sperre und verwendet das Objekt exklusiv. Alle Threads, die anrufen Wait , verbleiben in der Warteschleife, bis sie ein Signal von Pulse oder PulseAll, das vom Besitzer der Sperre gesendet wird. Wenn Pulse der Thread gesendet wird, ist nur der Thread an der Kopfzeile der Warteschleife betroffen. Wenn PulseAll das Objekt gesendet wird, sind alle Threads betroffen, die auf das Objekt warten. Wenn das Signal empfangen wird, verlassen mindestens ein Threads die Warteschleife, und geben Sie die bereite Warteschlange ein. Ein Thread in der bereiten Warteschlange kann die Sperre erneut abrufen.
Diese Methode gibt zurück, wenn der aufrufende Thread die Sperre für das Objekt erneut aufruft. Beachten Sie, dass diese Methode unbegrenzt blockiert wird, wenn der Inhaber der Sperre nicht aufruft Pulse oder PulseAll.
Der Anrufer führt Wait einmal aus, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait-Methode, wie oft der Aufrufer Enter auf das Objekt angewendet hat, und ruft Exit so oft auf, wie nötig ist, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während darauf gewartet wird, das Objekt erneut abzurufen. Wenn der Anrufer das Lock wiedererlangt, ruft das System Enter so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Anrufer wiederherzustellen. Durch Aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.
Beachten Sie, dass ein synchronisiertes Objekt mehrere Verweise enthält, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die Wartewarteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung im Zustand des Objekts warten.
Die Pulse Methoden, PulseAll Methoden und Wait Methoden müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.
In den Hinweisen für die Pulse-Methode wird erläutert, was passiert, wenn Pulse aufgerufen wird, während keine Threads warten.
Weitere Informationen
Gilt für:
Wait(Object, Int32)
- Quelle:
- Monitor.CoreCLR.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.CoreCLR.cs
- Quelle:
- Monitor.CoreCLR.cs
- Quelle:
- Monitor.CoreCLR.cs
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange.
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
Parameter
- obj
- Object
Das Objekt, auf das gewartet werden soll.
- millisecondsTimeout
- Int32
Die Anzahl der Millisekunden, die gewartet werden sollen, bevor der Thread die bereite Warteschlange eingibt.
Gibt zurück
true wenn die Sperre vor ablaufen der angegebenen Zeit erneut abgerufen wurde; false wenn die Sperre nach ablaufen der angegebenen Zeit erneut abgerufen wurde. Die Methode wird erst zurückgegeben, wenn die Sperre erneut verwendet wird.
- Attribute
Ausnahmen
Der obj Parameter ist null.
Der aufrufende Thread besitzt nicht die Sperre für das angegebene Objekt.
Der aufgerufene Wait Thread wird später vom Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Methode dieses Threads Interrupt() aufruft.
Der Wert des millisecondsTimeout Parameters ist negativ und ist nicht gleich Infinite.
Hinweise
Diese Methode kehrt erst zurück, wenn sie ein exklusives Lock für den Parameter obj zurückerlangt hat.
Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre wiederzuerlangen. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die aufgrund der Vorgänge eines anderen Threads auftritt.
Durch das Timeout wird sichergestellt, dass der aktuelle Thread nicht auf unbestimmte Zeit blockiert wird, wenn ein anderer Thread die Sperre loslässt, ohne zuerst die Pulse- oder PulseAll-Methode aufzurufen. Außerdem verschiebt sie den Thread in die Readiness-Warteschlange und umgeht damit andere Threads, die in der Warteschlange vor ihm stehen, sodass er das Lock früher wiedererlangen kann. Der Thread kann den Rückgabewert der Methode Wait testen, um festzustellen, ob er das Lock vor dem Timeout wiedererlangt hat. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in die Warteschlange eingetreten ist, und gegebenenfalls die Methode Wait erneut aufrufen.
Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und gibt die Wartewarteschlange des Objekts ein. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) erhält die Sperre und verwendet das Objekt exklusiv. Der Thread, der Wait aufgerufen hat, bleibt in der Warteschlange, bis entweder ein Thread, der die Sperre hält, PulseAll aufruft, oder bis er als Nächster in der Warteschlange steht und ein Thread, der die Sperre hält, Pulse aufruft. Wenn jedoch millisecondsTimeout verstreicht, bevor ein anderer Thread die Pulse- oder PulseAll-Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die Readiness-Warteschlange verschoben, um das Lock wiederzuerlangen.
Note
Wenn Infinite für den millisecondsTimeout-Parameter angegeben wird, blockiert diese Methode unbegrenzt, es sei denn, der Inhaber der Sperre ruft Pulse oder PulseAll auf. Wenn millisecondsTimeout gleich 0 ist, gibt der Thread, der Wait aufruft, das Lock frei und geht dann sofort in die Readiness Warteschlange, um das Lock wiederzuerlangen.
Der Anrufer führt Wait einmal aus, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait-Methode, wie oft der Aufrufer Enter auf das Objekt angewendet hat, und ruft Exit so oft auf, wie nötig ist, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während darauf gewartet wird, das Objekt erneut abzurufen. Wenn der Anrufer das Lock wiedererlangt, ruft das System Enter so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Anrufer wiederherzustellen. Durch Aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.
Note
Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die Warteschleife, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung im Zustand des Objekts warten.
Die Pulse Methoden, PulseAll Methoden und Wait Methoden müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.
In den Hinweisen für die Pulse-Methode wird erläutert, was passiert, wenn Pulse aufgerufen wird, während keine Threads warten.
Weitere Informationen
Gilt für:
Wait(Object, TimeSpan)
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange.
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
Parameter
- obj
- Object
Das Objekt, auf das gewartet werden soll.
Gibt zurück
true wenn die Sperre vor ablaufen der angegebenen Zeit erneut abgerufen wurde; false wenn die Sperre nach ablaufen der angegebenen Zeit erneut abgerufen wurde. Die Methode wird erst zurückgegeben, wenn die Sperre erneut verwendet wird.
- Attribute
Ausnahmen
Der obj Parameter ist null.
Der aufrufende Thread besitzt nicht die Sperre für das angegebene Objekt.
Der aufgerufene Wait Thread wird später vom Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Methode dieses Threads Interrupt() aufruft.
Der Wert des timeout Parameters in Millisekunden ist negativ und stellt nicht Infinite dar (-1 Millisekunden) oder größer als Int32.MaxValue.
Hinweise
Diese Methode kehrt erst zurück, wenn sie ein exklusives Lock für den Parameter obj zurückerlangt hat.
Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um das Objekt freizugeben, damit ein anderer Thread darauf zugreifen kann. Der Aufrufer wird blockiert, während er darauf wartet, die Sperre wiederzuerlangen. Diese Methode wird aufgerufen, wenn der Aufrufer auf eine Zustandsänderung warten muss, die aufgrund der Vorgänge eines anderen Threads auftritt.
Durch das Timeout wird sichergestellt, dass der aktuelle Thread nicht auf unbestimmte Zeit blockiert wird, wenn ein anderer Thread die Sperre loslässt, ohne zuerst die Pulse- oder PulseAll-Methode aufzurufen. Außerdem verschiebt sie den Thread in die Readiness-Warteschlange und umgeht damit andere Threads, die in der Warteschlange vor ihm stehen, sodass er das Lock früher wiedererlangen kann. Der Thread kann den Rückgabewert der Methode Wait testen, um festzustellen, ob er das Lock vor dem Timeout wiedererlangt hat. Der Thread kann die Bedingungen auswerten, die dazu geführt haben, dass er in die Warteschlange eingetreten ist, und gegebenenfalls die Methode Wait erneut aufrufen.
Wenn ein Thread aufruft Wait, gibt er die Sperre für das Objekt frei und gibt die Wartewarteschlange des Objekts ein. Der nächste Thread in der bereiten Warteschlange des Objekts (sofern vorhanden) erhält die Sperre und verwendet das Objekt exklusiv. Der Thread, der Wait aufgerufen hat, bleibt in der Warteschlange, bis entweder ein Thread, der die Sperre hält, PulseAll aufruft, oder bis er als Nächster in der Warteschlange steht und ein Thread, der die Sperre hält, Pulse aufruft. Wenn jedoch timeout verstreicht, bevor ein anderer Thread die Pulse- oder PulseAll-Methode dieses Objekts aufruft, wird der ursprüngliche Thread in die Readiness-Warteschlange verschoben, um das Lock wiederzuerlangen.
Note
Wenn für den Parameter TimeSpan ein timeout angegeben wird, der für -1 Millisekunde steht, blockiert diese Methode auf unbestimmte Zeit, es sei denn, der Inhaber des Locks ruft Pulse oder PulseAll auf. Wenn timeout 0 Millisekunden beträgt, gibt der Thread, der Wait aufruft, die Sperre frei und tritt dann sofort in die Warteschlange ein, um die Sperre wieder zu erlangen.
Der Anrufer führt Wait einmal aus, unabhängig davon, wie oft Enter für das angegebene Objekt aufgerufen wurde. Konzeptionell speichert die Wait-Methode, wie oft der Aufrufer Enter auf das Objekt angewendet hat, und ruft Exit so oft auf, wie nötig ist, um das gesperrte Objekt vollständig freizugeben. Der Aufrufer blockiert dann, während darauf gewartet wird, das Objekt erneut abzurufen. Wenn der Anrufer das Lock wiedererlangt, ruft das System Enter so oft wie nötig auf, um die gespeicherte Enter Anzahl für den Anrufer wiederherzustellen. Durch Aufrufen Wait wird die Sperre nur für das angegebene Objekt freigegeben. Wenn der Aufrufer der Besitzer von Sperren für andere Objekte ist, werden diese Sperren nicht freigegeben.
Note
Ein synchronisiertes Objekt enthält mehrere Verweise, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die Warteschleife, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung im Zustand des Objekts warten.
Die Pulse Methoden, PulseAll Methoden und Wait Methoden müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.
In den Hinweisen für die Pulse-Methode wird erläutert, was passiert, wenn Pulse aufgerufen wird, während keine Threads warten.
Weitere Informationen
Gilt für:
Wait(Object, TimeSpan, Boolean)
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
- Quelle:
- Monitor.cs
Gibt die Sperre für ein Objekt frei und blockiert den aktuellen Thread, bis die Sperre erneut ausgeführt wird. Wenn das angegebene Timeoutintervall verstrichen ist, wechselt der Thread in die bereite Warteschlange. Beendet optional die Synchronisierungsdomäne für den synchronisierten Kontext, bevor die Wartezeit gewartet und die Domäne danach erneut abgerufen wird.
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
Parameter
- obj
- Object
Das Objekt, auf das gewartet werden soll.
- exitContext
- Boolean
trueum die Synchronisierungsdomäne für den Kontext (sofern in einem synchronisierten Kontext) vor dem Warten zu beenden und erneut zu erhalten; andernfalls . false
Gibt zurück
true wenn die Sperre vor ablaufen der angegebenen Zeit erneut abgerufen wurde; false wenn die Sperre nach ablaufen der angegebenen Zeit erneut abgerufen wurde. Die Methode wird erst zurückgegeben, wenn die Sperre erneut verwendet wird.
- Attribute
Ausnahmen
Der obj Parameter ist null.
Wait wird nicht innerhalb eines synchronisierten Codeblocks aufgerufen.
Der Thread, der "Wait" aufruft, wird später vom Wartezustand unterbrochen. Dies geschieht, wenn ein anderer Thread die Methode dieses Threads Interrupt() aufruft.
Der timeout Parameter ist negativ und stellt nicht Infinite dar (-1 Millisekunden) oder größer als Int32.MaxValue.
Hinweise
Weitere Informationen zu dieser API finden Sie in den ergänzenden API-Hinweisen für Monitor.Wait.