我正在编写一个基于等待/睡眠范式的网络绑定应用程序。
有时,会发生连接错误,根据我的经验,等待一段时间然后重试操作是值得的。
问题是,如果我在 await/async 中使用 Thread.Sleep 或其他类似的阻塞操作,它会阻塞调用者线程中的所有活动。
我应该用什么替换 Thread.Sleep(10000) 以达到与
await Thread.SleepAsync(10000)
?
更新
我更喜欢在不创建任何额外线程的情况下执行此操作的答案
我正在编写一个基于等待/睡眠范式的网络绑定应用程序。
有时,会发生连接错误,根据我的经验,等待一段时间然后重试操作是值得的。
问题是,如果我在 await/async 中使用 Thread.Sleep 或其他类似的阻塞操作,它会阻塞调用者线程中的所有活动。
我应该用什么替换 Thread.Sleep(10000) 以达到与
await Thread.SleepAsync(10000)
?
更新
我更喜欢在不创建任何额外线程的情况下执行此操作的答案
建议开始一个新线程的其他答案是一个坏主意 - 根本没有必要这样做。async
/的部分意义await
在于减少应用程序所需的线程数。
您应该改用Task.Delay
which不需要新线程,并且正是为此目的而设计的:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);