AutoResetEvent.WaitOne mit Timeout im Vergleich zu Thread.Sleep

8

Ich brauche eine Lösung, um eine beliebige Pause zu machen. Die Verzögerungsgenauigkeit ist irrelevant. Was ist der praktische Unterschied in einem solchen Szenario zwischen WaitHandle.WaitOne-Methode (TimeSpan) und Thread.Sleep-Methode . Gibt es bessere Lösungen?

    
Ryszard Dżegan 22.01.2014, 11:47
quelle

3 Antworten

6

Wenn Ihre Spezifikation etwas wie "Warten Sie mindestens zwei Sekunden, bevor Sie fortfahren" sagt, verwenden Sie Schlaf ().

Wenn Ihre Spezifikation etwas wie 'Warte auf bis zu zwei Sekunden für ein Signal von einem anderen Thread und einen Fehler, wenn das Zeitlimit abgelaufen ist' zurückgibt, verwende ein Ereignisobjekt.

Es ist im Grunde so einfach.

Es gibt im Wesentlichen keine "Leistungsunterschiede". Timing Genauigkeit, da beide Aufrufe den gleichen Mechanismus für Timeouts verwenden.

"Bessere" Lösungen - was ist "besser"? Besser in welcher Hinsicht?

    
Martin James 22.01.2014, 12:45
quelle
5

1.Thread.Sleep (Zeitüberschreitung) verursacht eine bedingungslose Wartezeit, bevor die Ausführung fortgesetzt wird.

2.WaitOne (Zeitüberschreitung) bewirkt, dass der Thread bis zu

wartet
  • Das Ereignis wird ausgelöst,
  • Die Zeitüberschreitung ist erreicht
santosh singh 22.01.2014 11:52
quelle
1

Ich würde mich dagegen aussprechen, jemals Thread.Sleep(...) ... zu benutzen, einfach weil ich es nicht mag, einen Thread unnötigerweise zu blockieren ... Also ein WaitHandle zu verwenden, halte ich für die überlegene Option.

Alternative

Wenn die Eleganz Ihres Codes unter WaitHandle leidet, haben Sie dann await Task.Delay(...) berücksichtigt? Dies ergibt eine Funktionalität ähnlich zu Thread.Sleep(...) , ohne den Thread zu blockieren.

    
Andrew 22.01.2014 12:51
quelle

Tags und Links