在我的应用程序冻结之后,我将原因跟踪到等待创建的任务的线程 Task.Delay()
(要么 TaskEx.Delay()
在.NET 4.0中,它提供了一个计算 TimeSpan
由于一个错误,有时计算到一个 TimeSpan
用一个 TotalMilliseconds
小于或等于 -1
并且大于 -2
(即-10000到-19999个刻度之间的任何位置,包括在内)。
当你通过否定时,似乎 TimeSpan
那是 -2
毫秒或更低,该方法正确抛出一个 ArgumentOutOfRangeException
,但是当您从上述范围中提供负时间间隔时,它会返回一个 Task
从未完成(通过设置基础 System.Threading.Timer
到了 dueTime
-1表示无穷大)。这意味着在该任务上设置的任何延续都将永远不会执行,并且任何可怜的线程都会发生 .Wait()
在那 Task
将永远被封锁。
什么可能的用途可以 Task
永远不会完成的?有人会期望这样的回报值吗?不应该传递任何负值 .Delay()
,包括该特殊范围内的值,抛出一个 ArgumentOutOfRangeException
?