ThreadPool.UnsafeRegisterWaitForSingleObject Methode

Definition

Registriert einen Delegaten, damit auf ein WaitHandle gewartet wird. Die Aufrufliste wird jedoch nicht an den Arbeitsthread weitergeleitet.

Überlädt

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Registriert einen Delegaten, der auf ein WaitHandle wartet, und gibt einen TimeSpan-Wert für das Timeout an. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen verwendet wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, TimeSpan, Boolean)

Registriert einen Delegaten, der auf ein WaitHandle wartet, und gibt einen TimeSpan-Wert für das Timeout an. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

public:
 static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, TimeSpan timeout, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, TimeSpan timeout, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, TimeSpan timeout, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * TimeSpan * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, timeout As TimeSpan, executeOnlyOnce As Boolean) As RegisteredWaitHandle

Parameter

waitObject
WaitHandle

Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.

callBack
WaitOrTimerCallback

Der Delegat, der aufgerufen werden soll, wenn der waitObject-Parameter signalisiert wird.

state
Object

Das an den Delegaten übergebene Objekt.

timeout
TimeSpan

Das durch eine TimeSpan dargestellte Timeout. Wenn timeout den Wert 0 (null) hat, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn timeout den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.

executeOnlyOnce
Boolean

true, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject-Parameter warten soll. false, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.

Gibt zurück

RegisteredWaitHandle

Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.

Attribute

Ausnahmen

Der timeout-Parameter ist kleiner als -1.

Der timeout Parameter ist größer als Int32.MaxValue.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Hinweise

Im Gegensatz zur Methode UnsafeRegisterWaitForSingleObject wird der RegisterWaitForSingleObject Aufrufstapel nicht an den Arbeitsthread verteilt. Dadurch kann Code den Aufrufstapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.

Achtung

Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich ein Sicherheitsloch öffnen. Die Codezugriffssicherheit basiert auf den Berechtigungsüberprüfungen aller Aufrufer auf dem Stapel. Wenn die Arbeit auf einem Threadpoolthread mithilfe UnsafeRegisterWaitForSingleObjectvon Threadpoolthreads in Warteschlange steht, verfügt der Stapel des Threadpoolthreads nicht über den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies ausnutzen, um Berechtigungsüberprüfungen zu vermeiden.

Die Verwendung einer Mutex For waitObject bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standard-Flag WT_EXECUTEDEFAULT verwendet, sodass jeder Rückruf auf einem separaten Threadpoolthread verteilt wird.

Wenn Sie die RegisteredWaitHandle Verwendung der von dieser Methode zurückgegebenen Methode abgeschlossen haben, rufen Sie die RegisteredWaitHandle.Unregister Methode auf, um Verweise auf den Wartenpunkt zu freigeben. Wir empfehlen, dass Sie die RegisteredWaitHandle.Unregister Methode immer aufrufen, auch wenn Sie true executeOnlyOnceangeben. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister Methode anstelle des Finalizers des registrierten Wartens aufrufen.

Siehe auch

Gilt für:

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int32, Boolean)

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl mit Vorzeichen verwendet wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

public:
 static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, int millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Integer, executeOnlyOnce As Boolean) As RegisteredWaitHandle

Parameter

waitObject
WaitHandle

Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.

callBack
WaitOrTimerCallback

Der Delegat, der aufgerufen werden soll, wenn der waitObject-Parameter signalisiert wird.

state
Object

Das an den Delegaten übergebene Objekt.

millisecondsTimeOutInterval
Int32

Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.

executeOnlyOnce
Boolean

true, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject-Parameter warten soll. false, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.

Gibt zurück

RegisteredWaitHandle

Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.

Attribute

Ausnahmen

Der millisecondsTimeOutInterval-Parameter ist kleiner als -1.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Hinweise

RegisterWaitForSingleObject Im Gegensatz zur Methode UnsafeRegisterWaitForSingleObject wird der Aufrufstapel nicht an den Workerthread weitergegeben. Dadurch kann code den Aufrufstapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.

Achtung

Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich ein Sicherheitsloch öffnen. Die Codezugriffssicherheit basiert auf den Berechtigungsprüfungen aller Aufrufer im Stapel. Wenn die Arbeit auf einem Threadpoolthread mithilfe UnsafeRegisterWaitForSingleObjecteiner Warteschlange ausgeführt wird, verfügt der Stapel des Threadpoolthreads nicht über den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies möglicherweise ausnutzen, um Berechtigungsüberprüfungen zu vermeiden.

Die Verwendung von "Mutexfor" waitObject bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standardkennzeichnung WT_EXECUTEDEFAULT verwendet, sodass jeder Rückruf in einem separaten Threadpoolthread verteilt wird.

Wenn Sie mit der Verwendung der RegisteredWaitHandle von dieser Methode zurückgegebenen Methode fertig sind, rufen Sie die RegisteredWaitHandle.Unregister Methode auf, um Verweise auf den Wartepunkt freizugeben. Es wird empfohlen, die RegisteredWaitHandle.Unregister Methode immer aufzurufen, auch wenn Sie dies executeOnlyOnceangebentrue. Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister Methode anstelle des Finalizers des registrierten Wartepunkts aufrufen.

Siehe auch

Gilt für:

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, Int64, Boolean)

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 64-Bit-Ganzzahl mit Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

public:
 static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, long millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * int64 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As Long, executeOnlyOnce As Boolean) As RegisteredWaitHandle

Parameter

waitObject
WaitHandle

Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.

callBack
WaitOrTimerCallback

Der Delegat, der aufgerufen werden soll, wenn der waitObject-Parameter signalisiert wird.

state
Object

Das an den Delegaten übergebene Objekt.

millisecondsTimeOutInterval
Int64

Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.

executeOnlyOnce
Boolean

true, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject-Parameter warten soll. false, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.

Gibt zurück

RegisteredWaitHandle

Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.

Attribute

Ausnahmen

Der millisecondsTimeOutInterval-Parameter ist kleiner als -1.

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Hinweise

Im Gegensatz zur Methode UnsafeRegisterWaitForSingleObject wird der RegisterWaitForSingleObject Aufrufstapel nicht an den Arbeitsthread verteilt. Dadurch kann Code den Aufrufstapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.

Achtung

Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich ein Sicherheitsloch öffnen. Die Codezugriffssicherheit basiert auf den Berechtigungsüberprüfungen aller Aufrufer auf dem Stapel. Wenn die Arbeit auf einem Threadpoolthread mithilfe UnsafeRegisterWaitForSingleObjectvon Threadpoolthreads in Warteschlange steht, verfügt der Stapel des Threadpoolthreads nicht über den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies ausnutzen, um Berechtigungsüberprüfungen zu vermeiden.

Die Verwendung einer Mutex For waitObject bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standard-Flag WT_EXECUTEDEFAULT verwendet, sodass jeder Rückruf auf einem separaten Threadpoolthread verteilt wird.

Wenn Sie die RegisteredWaitHandle Verwendung der von dieser Methode zurückgegebenen Methode abgeschlossen haben, rufen Sie die RegisteredWaitHandle.Unregister Methode auf, um Verweise auf den Wartenpunkt zu freigeben. Wir empfehlen, dass Sie die RegisteredWaitHandle.Unregister Methode immer aufrufen, auch wenn Sie true executeOnlyOnceangeben. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister Methode anstelle des Finalizers des registrierten Wartens aufrufen.

Siehe auch

Gilt für:

UnsafeRegisterWaitForSingleObject(WaitHandle, WaitOrTimerCallback, Object, UInt32, Boolean)

Wichtig

Diese API ist nicht CLS-kompatibel.

Registriert einen Delegaten, der auf eine WaitHandle-Klasse wartet, wobei für das Timeout in Millisekunden eine 32-Bit-Ganzzahl ohne Vorzeichen angegeben wird. Diese Methode leitet den aufrufenden Stapel nicht an den Arbeitsthread weiter.

public:
 static System::Threading::RegisteredWaitHandle ^ UnsafeRegisterWaitForSingleObject(System::Threading::WaitHandle ^ waitObject, System::Threading::WaitOrTimerCallback ^ callBack, System::Object ^ state, System::UInt32 millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Runtime.Versioning.UnsupportedOSPlatform("browser")]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object? state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[System.CLSCompliant(false)]
[System.Security.SecurityCritical]
public static System.Threading.RegisteredWaitHandle UnsafeRegisterWaitForSingleObject (System.Threading.WaitHandle waitObject, System.Threading.WaitOrTimerCallback callBack, object state, uint millisecondsTimeOutInterval, bool executeOnlyOnce);
[<System.CLSCompliant(false)>]
[<System.Runtime.Versioning.UnsupportedOSPlatform("browser")>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
[<System.CLSCompliant(false)>]
[<System.Security.SecurityCritical>]
static member UnsafeRegisterWaitForSingleObject : System.Threading.WaitHandle * System.Threading.WaitOrTimerCallback * obj * uint32 * bool -> System.Threading.RegisteredWaitHandle
Public Shared Function UnsafeRegisterWaitForSingleObject (waitObject As WaitHandle, callBack As WaitOrTimerCallback, state As Object, millisecondsTimeOutInterval As UInteger, executeOnlyOnce As Boolean) As RegisteredWaitHandle

Parameter

waitObject
WaitHandle

Die zu registrierende WaitHandle. Verwenden Sie ein anderes WaitHandle als Mutex.

callBack
WaitOrTimerCallback

Der Delegat, der aufgerufen werden soll, wenn der waitObject-Parameter signalisiert wird.

state
Object

Das an den Delegaten übergebene Objekt.

millisecondsTimeOutInterval
UInt32

Das Timeout in Millisekunden. Wenn der millisecondsTimeOutInterval-Parameter 0 (null) ist, prüft die Funktion den Zustand des Objekts und kehrt sofort zurück. Wenn millisecondsTimeOutInterval den Wert -1 hat, läuft das Timeoutintervall der Funktion nie ab.

executeOnlyOnce
Boolean

true, um anzugeben, dass der Thread nach dem Aufruf des Delegaten nicht mehr auf den waitObject-Parameter warten soll. false, um anzugeben, dass der Zeitgeber nach jedem Abschluss des Wartevorgangs zurückgesetzt wird, bis die Registrierung des Wartevorgangs aufgehoben wird.

Gibt zurück

RegisteredWaitHandle

Das RegisteredWaitHandle-Objekt, mit dem der registrierte Wartevorgang abgebrochen werden kann.

Attribute

Ausnahmen

Der Aufrufer verfügt nicht über die erforderliche Berechtigung.

Hinweise

Im Gegensatz zur Methode UnsafeRegisterWaitForSingleObject wird der RegisterWaitForSingleObject Aufrufstapel nicht an den Arbeitsthread verteilt. Dadurch kann Code den Aufrufstapel verlieren und dadurch seine Sicherheitsberechtigungen erhöhen.

Achtung

Die Verwendung UnsafeRegisterWaitForSingleObject könnte versehentlich ein Sicherheitsloch öffnen. Die Codezugriffssicherheit basiert auf den Berechtigungsüberprüfungen aller Aufrufer auf dem Stapel. Wenn die Arbeit auf einem Threadpoolthread mithilfe UnsafeRegisterWaitForSingleObjectvon Threadpoolthreads in Warteschlange steht, verfügt der Stapel des Threadpoolthreads nicht über den Kontext der tatsächlichen Aufrufer. Böswilliger Code kann dies ausnutzen, um Berechtigungsüberprüfungen zu vermeiden.

Die Verwendung einer Mutex For waitObject bietet keinen gegenseitigen Ausschluss für die Rückrufe, da die zugrunde liegende Windows-API das Standard-Flag WT_EXECUTEDEFAULT verwendet, sodass jeder Rückruf auf einem separaten Threadpoolthread verteilt wird.

Wenn Sie die RegisteredWaitHandle Verwendung der von dieser Methode zurückgegebenen Methode abgeschlossen haben, rufen Sie die RegisteredWaitHandle.Unregister Methode auf, um Verweise auf den Wartenpunkt zu freigeben. Wir empfehlen, dass Sie die RegisteredWaitHandle.Unregister Methode immer aufrufen, auch wenn Sie true executeOnlyOnceangeben. Die Garbage Collection funktioniert effizienter, wenn Sie die RegisteredWaitHandle.Unregister Methode anstelle des Finalizers des registrierten Wartens aufrufen.

Siehe auch

Gilt für: