Ich schreibe eine netzwerkgebundene Anwendung, die auf dem Wait / Sleep-Paradigma basiert.
Manchmal treten Verbindungsfehler auf, und meiner Erfahrung nach lohnt es sich, einige Zeit zu warten und den Vorgang dann erneut zu versuchen.
Das Problem ist, dass wenn ich Thread.Sleep oder eine andere ähnliche Blockierungsoperation in await / async verwende, alle Aktivitäten im Aufrufer-Thread blockiert werden.
Womit soll ich Thread.Sleep (10000) ersetzen, um den gleichen Effekt wie zu erzielen?
await Thread.SleepAsync(10000)
?
AKTUALISIEREN
Ich bevorzuge eine Antwort, die dies tut, ohne einen zusätzlichen Thread zu erstellen
quelle
async
Intro hilfreich. Wenn die erwartete Rückgabe von bearbeitetTask.Delay
wirdawait
, gibt die aktuelle Methode eine unvollständige Aufgabe zurück, da sie nicht vollständig ist. Später, wenn derDelay
Vorgang abgeschlossen ist (außerhalb eines Timers, nicht eines Threads), wird die Ausführung der restlichen Methode geplant. Die Fortsetzung läuft in einem "Kontext", der möglicherweise zu demselben ursprünglichen Thread zurückkehrt - Details in meinem Blog.await
geplanten (eventuell) zurück.