Task.Delay()で無限の遅延が許可されるのはなぜですか?



Why Does Task Delay Allow An Infinite Delay



解決:

Timeout.Infiniteまたは-1は、完了までに不確定な時間がかかるが、最終的には完了する長時間実行タスクを無期限に待機する場合に役立ちます。

Win32 APIは、無限のタイムアウトに対して定数INFINITE = -1も使用します。



UIがフリーズする可能性があるため、通常はUIスレッドで使用することは望ましくありません(これは問題のようです)。ただし、ワーカースレッドには有効なユースケースがあります。クライアントからの接続の待機をブロックしているサーバー。


コンソールアプリケーションを終了させたくないときに使用しています。たとえば、私が書いているとき Webジョブ Azureの場合、終了しないプログラムが必要です。テンプレートは次のとおりです。



public async Task Main(string args []){var timer = new Timer(); timer.Interval = 6000; timer.Elapsed + =(sender、args)=> {// 1分ごとに何かを繰り返し実行します。 }; timer.Start(); //アプリケーションの終了を停止するにはどうすればよいですか? //それが魔法です:await Task.Delay(-1); } 

Task.WhenAny()ブロック内のコードが待機中のタスクの1つを正しく処理していることを確認したいモックシナリオでは、他のタスクをモックし、無限の遅延を使用してTask.WhenAnyが処理されていることを確認できます。私がモックしなかったタスクは、無限の遅延として発生しました。