【问题标题】:System.Threading.Thread.Sleep(1000) vs. System.Threading.Tasks.Task.Delay(1000).Wait()System.Threading.Thread.Sleep(1000) 与 System.Threading.Tasks.Task.Delay(1000).Wait()
【发布时间】: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() 调用显式等待那里使用的任何任务

标签: .net .net-4.5


【解决方案1】:

Thread.Sleep(1000) 是首选,因为它是执行同步等待的惯用方式。这已经是 15 年的标准了。没有任何问题。

Task.Delay(1000).Wait() 做同样的事情。它更难理解,打字更慢,执行更慢,在我看来,这是一种逆向思维。

如果您想要同步操作,请调用为此创建的同步 API。睡觉在这方面并不特别。

【讨论】:

    猜你喜欢
    • 2017-03-30
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 2018-11-14
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    相关资源
    最近更新 更多