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?
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?
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 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.
Tags und Links .net c# multithreading waithandle