在我应用程序冻结后,我追踪到一个线索的原因,等待 Task. Delay ()
(或 TaskEx. Delay ()
in.NET 4.0) 所创建的任务,该任务提供了计算出来的 TimeSpan
,由于一个错误,有时被计算为 TimeSpan
,其 TotalMillicons
小于或等于 -1
或大于 -2
(即从-100到-19999秒之间任何地方计算在内)。
当您通过负 TimeSpan
,即 -2
毫秒或更低时,该方法会正确地丢出一个 说明排除排除的参数
,但当您提供上述范围的负时间span时,它会返回一个从未完成的 Task
(通过设置 System.Treading.Timer
至 < dueTime
> -1,其中注明无限性),这意味着该任务上设置的任何延续将永远无法执行,而发生在 .wait()
上的任何差线将永远被屏蔽。
从未完成的 < code> Task 是否有可能有用? 有人会期待这样的返回值吗? 是否应该将负值传递到 < code> 。 Delay() , 包括该特殊范围内的数值, 丢出一个 < code > 演示排除 ?