2

次のようなタスクの配列を作成すると:

            var taskArray = new Task<double>[]
            {
                Task.Factory.StartNew(() => new Random().NextDouble()),
                Task.Factory.StartNew(() => new Random().NextDouble()),
                Task.Factory.StartNew(() => new Random().NextDouble())
            };

これで確実に 3 つのスレッドが作成されるのでしょうか、それとも適切と思われるスレッドを作成するのは CLR 次第でしょうか?

したがって、これを Web リクエストで実行すると、リクエストを正しく処理するために少なくとも 4 つのスレッドが作成されることになりますか? (Web リクエスト + タスクごとに 1)

4

2 に答える 2

6

これで確実に 3 つのスレッドが作成されるのでしょうか、それとも適切と思われるスレッドを作成するのは CLR 次第でしょうか?

後者。特に、これらのタスクは非常に迅速に完了するため、それらがすべて同じスレッドで実行されても驚かないでしょう (ただし、 を呼び出したスレッドと同じスレッドではありませんStartNew)。特に、これが「クリーン」プロセスにあり、スレッド プールがまだ多くのスレッドを起動する必要はありません。(IIRC、スレッド プールは 0.5 秒ごとに 1 つの新しいスレッドのみを開始します。これにより、単一のスレッドですべてのタスクを実行するのに十分な時間が与えられます。)

必要に応じて独自のカスタムを使用できますTaskSchedulerが、それは比較的極端です。

詳細については、タスク スケジューラ(既定のものを含む)に関する MSDN の記事を参照してください。

于 2012-10-29T19:01:34.353 に答える
0

簡単な答えはありません。サーバーで利用可能なリソースに依存します。キューをセットアップし、サーバーが同時に 3 つのスレッドを実行できる場合 (実行する場合)、それ以外の場合はキューに入れます。

于 2012-10-29T19:01:42.977 に答える