在我的应用程序冻结之后,我将原因跟踪到等待创建的任务的线程 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?