Pregunta

Según el la documentación de MSDN, Set () y Reset () en ManualResetEvent (o cualquier EventWaitHandle) devuelve un indicador booleano si o no la operación fue exitosa.

¿En qué circunstancias pueden este falso retorno de la llamada, y lo que se supone que debo hacer si lo hace?

¿Fue útil?

Solución

Yo no estaba seguro de cómo responder a esta y mirando un montón de ejemplos de MSDN el valor Conjunto de retorno es ignorado por lo que no debe ser importante, o que pueda suceder.

Pero eso no era lo suficientemente bueno. Disparé mi máquina virtual y abrí reflector para echar un vistazo en el código. ManualResetEvent no tiene Set pero hereda de EventWaitHandle la que lo hace. Aquí está el código:

public bool Set()
{
    bool flag = Win32Native.SetEvent(base.safeWaitHandle);
    if (!flag)
    {
        __Error.WinIOError();
    }
    return flag;
}

Cuando 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 para la llamada para volver falsa, algo muy malo habría tenido que haber ocurrido en el código nativo de Win32.

El poner 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 el núcleo no de todos modos?) Puede ignorar por sí mismo si quiere limpiar su la lógica un poco o conseguir y se registre si estás especialmente pedante.

Otros consejos

No estoy seguro de que solo registro de errores y continuar la ejecución sería lo suficientemente. resultado falso de Juego () puede llevar a un comportamiento incorrecto en las discusiones synchronozation gestionado por los manipuladores de espera. Es decir multihilo ... Mi visión de manipulación Conjunto falso () Resultado -. Excepción tiro, lo que probablemente en la mayoría de los casos pueden ser no controlada

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top