在我的应用程序冻结后,我追踪了一个线程等待由Task.Delay()
(或TaskEx.Delay()
在 .NET 4.0 中)创建的任务的原因,它为其提供了一个计算TimeSpan
,由于错误,有时计算为 aTimeSpan
小于TotalMilliseconds
或等于-1
和大于-2
(即介于 -10000 到 -19999 个刻度之间的任意位置,包括端点)。
看来,当您传递一个毫秒或更低的负数时,该TimeSpan
方法正确地-2
抛出一个表示无穷大)。这意味着该任务上设置的任何延续将永远不会执行,并且发生在该任务上的任何不良线程将永远被阻止。ArgumentOutOfRangeException
Task
System.Threading.Timer
dueTime
.Wait()
Task
Task
一个永远不会完成的东西有什么可能的用途?有人会期望这样的返回值吗?传递给 的任何负值.Delay()
(包括该特殊范围内的值)不应该抛出一个ArgumentOutOfRangeException
?