【发布时间】:2015-02-18 12:36:38
【问题描述】:
在学习 .NET 4.5 时,我得到的印象是 System.Threading.Tasks.Task.Delay(1000).Wait()(即阻塞延迟)优于 System.Threading.Thread.Sleep(1000)。这是真的吗?如果是,为什么?难道仅仅是因为.NET的行军命令一直是“尽可能使用最新的技术”吗?
【问题讨论】:
-
你确定第一部分是
Task.Delay().Wait()吗?这将以与Sleep相同的方式阻塞线程,只是以更昂贵的方式。也许是await Task.Delay()? -
@PanagiotisKanavos -- 是的,我的问题特别是关于阻塞类型的延迟(如
Sleep),其中阻塞是首选。你对它更“昂贵”的暗示是我正在寻找的答案。 -
不,你误会了。他们和他们做同样的坏事一样糟糕,只有 Task.Delay.Wait 通过线程池来解冻线程。实际上,那个 T.D.W.唤起 W.T.F.我的反应。没有官方或半官方博客提倡使用这种结构。
-
@PanagiotisKanavos -- 是的,我在答案here 中看到了它,这就是我好奇的原因。
-
这并不意味着它是一个推荐。只是回答者想添加延迟并输入任何想到的内容。您不能异步执行控制台应用程序的主要方法,因此必须使用
.Wait()调用显式等待那里使用的任何任务