当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Thread.Sleep(2500)vs.Task.Delay(2500).Wait()》经验,为你挑选了2个好方法。

我想要清楚一点.我知道Task.Delay内部会使用一个Timer,它显然是基于任务的(等待),但Thread.Sleep会导致线程被阻塞.但是,在任务上调用.Wait会导致线程被阻塞吗?

如果没有,人们会认为这Task.Delay(2500).Wait()比好Thread.Sleep(2500).这跟我所说的SO问题/答案略有不同.Wait().



1> i3arnon..:

使用Wait上还未完成的任务,直至任务完成确实阻塞线程.

使用Thread.Sleep更清楚,因为您明确地阻止了一个线程,而不是隐式阻塞任务.

使用的唯一方法Task.Delay是允许使用a CancellationToken,如果你愿意,可以取消阻止.


@BradleyUffner好吧,你可以创建一个自我取消令牌(在内部使用一个计时器)......

2> Guillaume F...:

Thread.Sleep(...) 创建一个事件以在X millisec中唤醒你,然后让你的线程进入睡眠......在X毫秒中,事件唤醒你.

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

基本上,它们都非常相似.唯一的区别是如果你想从另一个Thread早期醒来,你将不会遇到相同的方法.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有