[英]How to get awaitable Thread.Sleep?
我正在編寫一個基於等待/睡眠范式的網絡綁定應用程序。
有時,會發生連接錯誤,根據我的經驗,等待一段時間然后重試操作是值得的。
問題是,如果我在 await/async 中使用 Thread.Sleep 或其他類似的阻塞操作,它會阻塞調用者線程中的所有活動。
我應該用什么替換 Thread.Sleep(10000) 以達到與
await Thread.SleepAsync(10000)
?
更新
我更喜歡在不創建任何額外線程的情況下執行此操作的答案
建議開始一個新線程的其他答案是一個壞主意 - 根本沒有必要這樣做。 async
/ await
的部分目的是減少應用程序所需的線程數。
您應該改用不需要新線程的Task.Delay
,並且正是為此目的而設計的:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
如果提供了取消令牌,此解決方案還具有允許取消的優點。 例子:
public async Task DoWork(CancellationToken token)
{
await Task.Delay(1000, token);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.