Question

Selon la la documentation MSDN, Set () et Reset () sur ManualResetEvent (ou tout EventWaitHandle) retourne un indicateur booléen si oui ou non l'opération a réussi.

Dans quelles circonstances ce retour faux appel, et que dois-je faire si elle le fait?

Était-ce utile?

La solution

Je ne savais pas comment répondre à cela et regarder beaucoup d'exemples MSDN la valeur de retour de consigne est ignorée il ne doit pas être important ou susceptible de se produire.

Mais cela ne suffisait pas bon. Je tirai mon VM et j'ai ouvert réflecteur pour jeter un oeil sur le code. ManualResetEvent n'a pas été défini mais il hérite de EventWaitHandle qui fait. Voici le code:

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

Où SetEvent est importé de Kernel32:

[DllImport("kernel32.dll", SetLastError=true)]
internal static extern bool SetEvent(SafeWaitHandle handle);

L'appel appelle simplement GetLastWin32Error que nous ne soucions pas vraiment WinIOError (). Fondamentalement, cela signifie pour l'appel à retourner faux, quelque chose d'assez mal aurait dû avoir eu lieu dans le code natif Win32.

Mettre cette information ainsi que le fait que le code hébergé dans la documentation MSDN officielle ne tient pas compte de la valeur de retour (pourquoi pas? Qu'est-ce que vous allez faire si le noyau ne quand même?), Vous pouvez ignorer en toute sécurité vous-même si vous voulez nettoyer votre logique un peu ou l'obtenir et connectez-vous si vous êtes particulièrement pédant.

Autres conseils

Je ne suis pas sûr que l'erreur et connectez-vous continuer l'exécution serait enought. Faux résultat de Set () peut apporter un comportement erroné dans les discussions synchronozation géré par les gestionnaires d'attente. C'est multithreading ... Ma vision de la manipulation de faux Set () résultat -. Exception de projection, ce qui a probablement dans la plupart des cas peuvent être Unhandled

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top