【问题标题】:Are there any use cases for Task.Delay(-1)? [duplicate]Task.Delay(-1) 有什么用例吗? [复制]
【发布时间】:2016-12-27 03:40:39
【问题描述】:

我想知道Task.Delay(-1)Task.Delay(TimeSpan.FromMilliseconds(-1)) 是否有任何用例。根据各自的文档,该方法创建的任务在完成之前无限期等待。我知道await Task.Delay(...) 不会阻塞线程,也不会消耗太多资源,但我想不出浪费一些资源实际上有用的任何场景。

我的问题是关于 Task.Deley() 的过载而没有取消令牌 - overloads that include cancellation token 可能会更有用,因为等待期可能会被中断。

我是否错过了一些无限期等待任务的用例?它们只是为了方法重载之间的一致性而存在吗?

【问题讨论】:

  • 您是否因此问是否有一个任务的用例,一旦启动就会无限期地等待被触发,而不是只在您需要的时候创建一个任务?
  • @iheanyi 不是真的。我的意思是,如果你创建了一个任务,你最终想要启动它——所以如果你有一个var t = Task.Delay(-1),在某些时候你想要await t(或者等待t和其他一些任务的组合)和等待t 对我来说没有任何意义。
  • 明确一点,你说的是System.Threading.Timeout.Infinite (msdn.microsoft.com/en-us/library/…) 这个字段的值为-1 (0xFFFFFFFF)
  • @TomaszMaczyński:嗯,我想不出一个……确实,这似乎违反了Stephen Toub's advice here

标签: c# .net vb.net async-await task-parallel-library


【解决方案1】:

我不认为他们打算将其用作 Task.Delay(-1),而是用作 Task.Delay(-1,cancellationToken)。这样你就可以开始你的任务并永远阻止它,或者直到 cancelToken(在这种情况下是一个“开始令牌”)被触发。我想不出单独执行 .Delay(-1) 的理由,因为这也会阻止进程退出。

【讨论】:

  • 我也有类似的感受,所以我在问题的第二段中加入了:“我的问题特别是关于没有取消令牌的 Task.Delay() 的重载 - 包括取消令牌的重载可能会更多很有用,因为可以中断等待期。”
猜你喜欢
  • 1970-01-01
  • 2014-01-24
  • 2011-01-21
  • 2020-06-18
  • 2019-07-11
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 2015-09-29
相关资源
最近更新 更多