3

Task.DelaySystem.Threading.Timer内部で使用します。主な質問はSystem.Threading.Timer、アプリケーションのノンブロッキングですか? 私が作る場合:

await Task.Delay(15)

次のコードはスレッドを 15ms 使用しますか? または、OS を使用してコールバックを行います。これに関する情報はどこにありますか?

4

1 に答える 1

4

Jeffrey Richter (page 748) によると:

内部的には、スレッド プールには、すべての Timer オブジェクトに使用するスレッドが 1 つだけあります。このスレッドは、次の Timer オブジェクトの時間がいつになるかを認識しています。次の Timer オブジェクトの期限が来ると、スレッドが起動し、ThreadPool の QueueUserWorkItem を内部的に呼び出してスレッド プールのキューにエントリを入力し、コールバック メソッドが呼び出されるようにします。

これは、タイマーの実行時に少なくとも 2 つのワーカー スレッドが存在することを意味します。1 つはタイマー用の内部スレッドで、もう 1 つは実際のワーカー プロセス用です。

于 2013-01-13T19:21:33.190 に答える