如何获得等待的Thread.Sleep?

时间:2012-11-17 10:32:10

标签: c# .net multithreading async-await

我正在编写一个基于await / sleep范例的网络绑定应用程序。

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

问题是如果我在await / async中使用Thread.Sleep或类似的阻塞操作,它会阻止调用者线程中的所有活动。

我应该用什么来替换Thread.Sleep(10000)以获得与

相同的效果
await Thread.SleepAsync(10000)

更新

我更喜欢这样做的答案而不创建任何额外的线程

1 个答案:

答案 0 :(得分:257)

其他答案表明开始一个新线程是一个坏主意 - 根本没有必要这样做。 async / await的部分要点是减少应用程序所需的线程数。

您应该使用{em>不需要新线程的Task.Delay,并且是为此目的精确设计的:

// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);