我正在写一个基于等待/睡眠模式的网络绑定应用程序。
有时会发生连接错误,以我的经验,等待一段时间然后再次重试操作是值得的。
问题是,如果我在wait / async中使用Thread.Sleep或其他类似的阻止操作,它将阻止调用者线程中的所有活动。
我应该用Thread.Sleep(10000)代替以达到与
await Thread.SleepAsync(10000)
?
更新
我希望这样做而不创建任何其他线程的答案
我正在写一个基于等待/睡眠模式的网络绑定应用程序。
有时会发生连接错误,以我的经验,等待一段时间然后再次重试操作是值得的。
问题是,如果我在wait / async中使用Thread.Sleep或其他类似的阻止操作,它将阻止调用者线程中的所有活动。
我应该用Thread.Sleep(10000)代替以达到与
await Thread.SleepAsync(10000)
?
更新
我希望这样做而不创建任何其他线程的答案
Answers:
其他建议启动新线程的答案是个坏主意-根本不需要这样做。点的一部分async
/ await
是减少线程应用程序需要的数量。
你应该使用Task.Delay
哪并不需要一个新的线程,并且正是为此而设计的:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
async
介绍很有帮助。当返回的awaitable Task.Delay
是await
编的,因为它不是完整的,目前的方法返回一个未完成的任务。稍后,当Delay
完成(关闭计时器,而不是线程)时,将计划运行该方法的其余部分。继续在“上下文”中运行,该上下文可能返回相同的原始线程-我的博客上的详细信息。
await
并且调度了(最终)之后的代码。