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