Task.Delay
System.Threading.Timer
内部で使用します。主な質問はSystem.Threading.Timer
、アプリケーションのノンブロッキングですか? 私が作る場合:
await Task.Delay(15)
次のコードはスレッドを 15ms 使用しますか? または、OS を使用してコールバックを行います。これに関する情報はどこにありますか?
Task.Delay
System.Threading.Timer
内部で使用します。主な質問はSystem.Threading.Timer
、アプリケーションのノンブロッキングですか? 私が作る場合:
await Task.Delay(15)
次のコードはスレッドを 15ms 使用しますか? または、OS を使用してコールバックを行います。これに関する情報はどこにありますか?
Jeffrey Richter (page 748) によると:
内部的には、スレッド プールには、すべての Timer オブジェクトに使用するスレッドが 1 つだけあります。このスレッドは、次の Timer オブジェクトの時間がいつになるかを認識しています。次の Timer オブジェクトの期限が来ると、スレッドが起動し、ThreadPool の QueueUserWorkItem を内部的に呼び出してスレッド プールのキューにエントリを入力し、コールバック メソッドが呼び出されるようにします。
これは、タイマーの実行時に少なくとも 2 つのワーカー スレッドが存在することを意味します。1 つはタイマー用の内部スレッドで、もう 1 つは実際のワーカー プロセス用です。