Domanda

Secondo la documentazione MSDN, Set() e Reset() su ManualResetEvent (o qualsiasi EventWaitHandle) restituiscono un indicatore booleano se l'operazione ha avuto esito positivo o meno.

In quali circostanze questa chiamata può restituire false e cosa dovrei fare in tal caso?

È stato utile?

Soluzione

Non ero sicuro di come rispondere a questa e guardando un sacco di esempi MSDN il valore di Set di ritorno viene ignorato in modo che non deve essere importante o probabile che accada.

Ma questo non era abbastanza buono. Ho sparato il mio VM e ho aperto Reflector per dare un'occhiata al codice. ManualResetEvent non ha Set ma eredita da EventWaitHandle che 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. In pratica questo significa per la chiamata per tornare falso, qualcosa di molto sbagliato avrebbe dovuto si sono verificati nel codice nativo 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 vuole pulire il vostro logica un po 'o scarica e registrare se siete particolarmente pedante.

Altri suggerimenti

Non sono sicuro che sia sufficiente registrare l'errore e continuare l'esecuzione.Un risultato falso da Set() può comportare un comportamento errato nella sincronizzazione dei thread gestita dai gestori di attesa.Questo è il multithreading...La mia visione di gestire il risultato falso Set(): lancia un'eccezione, che probabilmente nella maggior parte dei casi può essere non gestita.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top