C# 如何获得等待线程。睡眠?
我正在编写一个基于等待/睡眠范例的网络绑定应用程序 有时会发生连接错误,根据我的经验,等待一段时间,然后再次重试操作是值得的 问题是,如果我在wait/async中使用Thread.Sleep或其他类似的阻塞操作,它会阻塞调用线程中的所有活动 我应该用什么替换Thread.Sleep(10000)以达到与相同的效果C# 如何获得等待线程。睡眠?,c#,.net,multithreading,async-await,C#,.net,Multithreading,Async Await,我正在编写一个基于等待/睡眠范例的网络绑定应用程序 有时会发生连接错误,根据我的经验,等待一段时间,然后再次重试操作是值得的 问题是,如果我在wait/async中使用Thread.Sleep或其他类似的阻塞操作,它会阻塞调用线程中的所有活动 我应该用什么替换Thread.Sleep(10000)以达到与相同的效果 await Thread.SleepAsync(10000) ? 更新 我更喜欢这样一个答案,它不需要创建任何额外的线程其他答案建议启动一个新线程是一个坏主意-根本没有必要这样做。
await Thread.SleepAsync(10000)
?
更新
我更喜欢这样一个答案,它不需要创建任何额外的线程其他答案建议启动一个新线程是一个坏主意-根本没有必要这样做。
async
/wait
的部分要点是减少应用程序所需的线程数
您应该改为使用不需要新线程的线程,该线程正是为此目的而设计的:
// Execution of the async method will continue one second later, but without
// blocking.
await Task.Delay(1000);
我仍在努力解决a4.5的问题。在那个语句之后,代码的执行分支在哪里?非睡眠/阻塞部分是执行它还是执行等待的“线程”?主非阻塞执行是否只留下下面的块(也称为返回)?是的。这正是我想要的need@kenny字体你会发现我的建议很有帮助。当
Task.Delay
返回的等待任务被await
ed时,由于它未完成,当前方法返回一个未完成的任务。稍后,当延迟完成时(关闭计时器,而不是线程),该方法的其余部分将计划运行。继续在“上下文”中运行,可能会返回到相同的原始线程-详细信息在我的博客上。@StephenCleary谢谢。那么,我说wait之后的代码被“安排”执行,调用线程返回,对吗?是的,调用线程(立即)返回,wait
之后的代码被安排(最终)。