Non ero sicuro di come rispondere a questo e guardando un sacco di esempi MSDN il valore di ritorno Set viene ignorato in modo che non deve essere importante o probabile che accada.
Ma non era abbastanza buono. Ho acceso la mia VM e ho aperto Reflector per dare un'occhiata al codice. ManualResetEvent non ha Set ma eredita da EventWaitHandle che lo fa. Ecco il codice:
public bool Set()
{
bool flag = Win32Native.SetEvent(base.safeWaitHandle);
if (!flag)
{
__Error.WinIOError();
}
return flag;
}
Dove SetEvent è importata da Kernel32:
[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
La chiamata WinIOError() chiama semplicemente GetLastWin32Error che non abbiamo veramente a cuore. Fondamentalmente questo significa che la chiamata restituirà false, qualcosa di abbastanza sbagliato si sarebbe dovuto verificare nel codice nativo di Win32.
Mettendo queste informazioni insieme al fatto che il codice ospitato nella documentazione ufficiale MSDN ignora il valore di ritorno (perché no? Che cosa hai intenzione di fare se il kernel non riesce comunque?) Si può tranquillamente ignorarlo se stessi se si desidera pulire la tua logica un po 'o prendila e loggala se sei particolarmente pedante.
fonte
2010-11-04 01:52:24
Risposta ben studiata. +1 – spender
Grazie! È stata una domanda interessante e mi ha incuriosito. –
Grazie Erik. Ispirato dal tuo lavoro, ho fatto la stessa cosa e ho aperto Reflector. Sembra che WinIOError() genererà sempre un'eccezione che tenta di rappresentare il codice di errore Win32 nel mondo .NET, il che ha senso, ma non spiega ancora perché la chiamata abbia un valore di ritorno! – SoftMemes