Faire un choix entre ManualResetEvent ou Thread.Sleep()

Je ne suis pas sûr que la stratégie à adopter...je me concentre sur mon opération se terminé, mais j'aimerais aussi garder les problèmes de performance sur un min trop...il y a une méthode appelée Execute() qui doit attendre (exécuter de manière synchrone) jusqu'à ce qu'une opération est terminée. Cette opération se déroule sur un autre thread. Il y a 2 façons de mettre en œuvre la même chose...

En utilisant ManualResetEvent

void Execute()
{
    taskHandle = new ManualResetEvent(false);
    .
    .
    //delegate task to another thread
    .
    .
    taskHandle.WaitOne();
}

OU

À l'aide d'un simple tout en construire

void Execute()
{
    .
    .
    //delegate task to another thread
    .
    .
    while (!JobCompleted)
        Thread.Sleep(1000);
}

Laquelle des deux approches dois-je adopter...pourquoi?

EDIT:

T2. Que faire si j'ai juste eu un vide tandis que contruct? Quel est la différence...?

while(!JobCompleted);

EDIT: (quelque chose que j'ai recueillies avant)

http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - Cet article dit manualresets rapport comparativement plus lent parce qu'ils sortent de code managé et de retour dans...

Je veux juste faire remarquer Fil.Sleep(0) utilisation. Indiquez zéro (0) pour indiquer que ce fil devrait être suspendu pour permettre à d'autres threads en attente d'exécution. Dans ce cas, le Sommeil(0) vaut mieux que le Sommeil(1000), mais en utilisant WaitHandle est encore plus approprié.
Le vide tandis que la boucle est fondamentalement un spinwait - il sera tout à fait consommer du CPU. Pas recommandé.

OriginalL'auteur deostroll | 2009-11-04