Laut der MSDN-Dokumentation gibt Set () und Reset () bei ManualResetEvent (oder einem beliebigen EventWaitHandle) einen booleschen Indikator zurück, ob die Operation erfolgreich war oder nicht.
Unter welchen Umständen kann dieser Aufruf falsch zurückgegeben werden, und was soll ich tun, wenn er es tut?
Ich war mir nicht sicher, wie ich das beantworten sollte, und wenn ich mir viele MSDN-Beispiele anschaue, wird der Set-Rückgabewert ignoriert, so dass er nicht wichtig ist oder wahrscheinlich passiert.
Aber das war nicht gut genug. Ich feuerte meine VM an und ich öffnete Reflector, um mir den Code anzusehen. ManualResetEvent verfügt nicht über Set, aber es erbt von EventWaitHandle, was tut. Hier ist der Code:
%Vor%Wo SetEvent von Kernel32 importiert wird:
%Vor%Der Aufruf WinIOError () ruft nur GetLastWin32Error auf, was uns nicht wirklich interessiert. Im Grunde bedeutet dies, dass für den Aufruf, falsch zurück zu geben, etwas ziemlich Falsches in dem nativen Win32-Code aufgetreten wäre.
Wenn Sie diese Informationen mit der Tatsache verknüpfen, dass Code, der in der offiziellen MSDN-Dokumentation gehostet wird, den Rückgabewert ignoriert (warum nicht? Was werden Sie tun, wenn der Kernel trotzdem versagt?), können Sie ihn selbst ignorieren, wenn Sie ihn bereinigen wollen Logge dich etwas auf oder hol es dir und logge es ein, wenn du besonders pedantisch bist.
Ich bin mir nicht sicher, ob nur Log-Fehler und Fortsetzen der Ausführung ausreichen würden. False-Ergebnis von Set () kann falsches Verhalten in Threads bringen, die von Wait-Handlern verwaltet werden. Das ist Multithreading ... Meine Vision der Handhabung von false Set () Ergebnis - Ausnahme auslösen, die wahrscheinlich in den meisten Fällen nicht behandelt werden kann.
Tags und Links c# multithreading waithandle