Task.Delay()アプリケーションがフリーズした後、 (またはTaskEx.Delay().NET 4.0で)作成されたタスクを待機しているスレッドの原因を突き止めました。このスレッドはTimeSpan、バグのために、または以下TimeSpanのaで計算されることがありました。TotalMilliseconds等しい-1以上-2(つまり、-10000から-19999ティックの間の任意の場所)。
ミリ秒以下の負の値を渡すと、メソッドは正しくスローするTimeSpanように見えますが、上記の範囲から負のTimeSpanを指定すると、完了しないaが返されます(基になる値を-1に設定することにより)無限大を示します)。つまり、そのタスクに設定された継続は実行されず、そのタスクで発生した貧弱なスレッドは永久にブロックされます。-2ArgumentOutOfRangeExceptionTaskSystem.Threading.TimerdueTime.Wait()Task
Task決して完了しない可能性のある用途は何ですか?誰かがそのような戻り値を期待しますか?その特別な範囲の値を含め、に渡される負の値は、 ?.Delay()をスローするべきではありません。ArgumentOutOfRangeException