如何得到等待线程。睡眠?

我正在编写一个基于等待/睡眠范例的网络绑定应用程序。

有时会发生连接错误,根据我的经验,等待一段时间后再重试操作是值得的。

问题是如果我使用 Thread。休眠或其他类似的阻塞操作,它会阻塞调用者线程中的所有活动。

我应该用什么替换 Thread.Sleep (10000)以达到与

await Thread.SleepAsync(10000)

更新

我更喜欢不需要创建任何额外线程就可以做到这一点的答案

73252 次浏览

其他答案建议开始一个新的线程是一个坏主意-没有必要这样做。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);
}