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