首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thread.Sleep(2500) vs. Task.Delay(2500).Wait()

Thread.Sleep(2500) vs. Task.Delay(2500).Wait()
EN

Stack Overflow用户
提问于 2015-12-03 04:29:05
回答 2查看 10.6K关注 0票数 10

我想要弄清楚这一点。我知道Task.Delay将在内部使用计时器,而且它显然是基于任务的(可等待的),而Thread.Sleep将导致线程被阻塞。但是,在任务上调用.Wait会导致线程被阻塞吗?

如果不是,人们会认为Task.Delay(2500).Wait()Thread.Sleep(2500)更好。这与我调用.Wait()时的SO question/answer here略有不同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-03 04:38:00

在未完成的任务上使用Wait实际上会阻塞线程,直到任务完成。

使用Thread.Sleep更加清晰,因为您显式地阻塞线程,而不是隐式地阻塞任务。

使用Task.Delay的唯一可取方式是,它允许使用CancellationToken,因此如果您愿意,可以取消阻止。

票数 15
EN

Stack Overflow用户

发布于 2015-12-03 04:40:07

Thread.Sleep(...)创建一个事件在X毫秒内唤醒你,然后让你的线程进入睡眠状态……在X毫秒中,该事件将唤醒您。

Task.Delay(...).Wait()在X毫秒内创建一个事件来启动一个任务,然后让你的线程进入睡眠状态,直到任务完成(使用等待)……在X毫秒中,事件启动任务,该任务立即结束,然后唤醒您。

基本上,它们都非常相似。唯一的区别是,如果你想从另一个线程中提早醒来,你不会遇到相同的方法。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34052381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档