Eine Wahl zu treffen zwischen ManualResetEvent oder Thread.Sleep()

Ich bin nicht sicher, welche Strategie zu verabschieden...konzentriere ich mich auf meine operation immer abgeschlossen, aber ich möchte auch halten Sie performance-Probleme auf min zu...es gibt eine Methode namens " Execute (), die hat zu warten (laufen synchron), bis eine operation abgeschlossen ist. Dieser Vorgang geschieht in einem anderen thread. Es gibt 2 Möglichkeiten zur Umsetzung, die gleiche Sache...

Durch die Verwendung von ManualResetEvent

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

ODER

Durch die Verwendung einer einfachen while-Konstrukt

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

Welche der beiden Ansätze soll ich übernehmen...warum?

EDIT:

Q2. Was ist, wenn ich hatte gerade eine leer, während contruct? Was ist der Unterschied...?

while(!JobCompleted);

EDIT: (etwas, was ich gesammelt vor)

http://www.yoda.arachsys.com/csharp/threads/waithandles.shtml - Dieser Artikel sagt manualresets sind vergleichsweise langsamer, weil Sie gehen aus managed code und zurück in...

  • Möchte nur darauf hinweisen Thread.Sleep(0) Verwendung. Geben Sie null (0), um anzuzeigen, dass dieser thread unterbrochen werden soll, damit die anderen wartenden threads ausführen. In diesem Fall Sleep(0) ist besser als Schlaf(1000), aber mit WaitHandle ist noch besser geeignet, obwohl.
  • Die leere while-Schleife ist im Grunde eine spinwait - es wird vollständig verbrauchen CPU. Nicht zu empfehlen.
InformationsquelleAutor deostroll | 2009-11-04
Schreibe einen Kommentar