0


次のコードを見てください。

for (int j = 0; j < 500000; j++)  
{  
    Console.WriteLine(j);  

    // Call BeginInvoke with last two parameters as null  

    IAsyncResult asyncRes = dlg.BeginInvoke(j, 4, ref refString, out outString, progressCallBack, null);   
}  

非同期的に呼び出されているメソッドが 5 分間スリープする場合。では、lac スレッドが 5 つ作成されたというのは正しいですか?

ありがとう。

4

1 に答える 1

4

それは一般的に正しくありません。デリゲートを呼び出すとBeginInvoke、非同期メソッドの実行がキューに入れられます。

.NET Threadpoolは、処理が必要な作業項目のキューに基づいてメソッドをいつどのように実行するかを決定し、最大のスループットを目指しますが、500000 スレッドを並行して実行することはありません。

5 分間のスリープとデリゲートでの小さなコンソール メッセージで例を試してみたところ、最初は 8 つのスレッドしか実行されていませんでしたが、ゆっくりと多くのスレッドが流れ込んでいました。

スレッド プールと非同期デリゲートの適切な説明については、この記事をお読みください。

于 2011-01-11T04:33:37.250 に答える