簡體   English   中英

如何獲得可等待的 Thread.Sleep?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM