No estaba seguro de cómo responder esto y de ver muchos ejemplos de MSDN. El valor de devolución del conjunto se ignora, por lo que no debe ser importante o probable que suceda.
Pero eso no fue suficiente. Encendí mi VM y abrí Reflector para echarle un vistazo al código. ManualResetEvent no tiene Set pero hereda de EventWaitHandle que sí lo hace. Aquí está el código:
public bool Set()
{
bool flag = Win32Native.SetEvent(base.safeWaitHandle);
if (!flag)
{
__Error.WinIOError();
}
return flag;
}
Dónde SetEvent ha sido importada desde Kernel32:
[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);
El WinIOError() llamada sólo llama GetLastWin32Error la que no le importa en realidad. Básicamente, esto significa que la llamada para devolver falso, algo bastante mal tendría que haber ocurrido en el código nativo de Win32.
Poniendo esta información junto con el hecho de que el código alojado en la documentación oficial de MSDN ignora el valor de retorno (¿por qué no? ¿Qué vas a hacer si falla el kernel?) Puedes ignorarlo tú mismo si quieres limpiarlo su lógica un poco o conseguirlo y registrarlo si eres especialmente pedante.
Respuesta bien investigada. +1 – spender
Gracias! Fue una pregunta interesante y me hizo sentir curiosidad. –
Gracias Erik. Inspirado por tu trabajo, hice lo mismo y abrí Reflector. Parece que WinIOError() arrojará siempre una excepción que intente representar el código de error de Win32 en el mundo .NET, lo que tiene sentido, pero aún no explica por qué la llamada tiene un valor de retorno. – SoftMemes