144 個のアイテムを含むキューがあります。各キュー要素はリクエストです。コードを並行して実行することで、処理のパフォーマンスを向上させようとしています。performaction(request) メソッドを呼び出します。オブジェクトをインスタンス化し、リクエストを渡してアクションを実行します。これらのリクエストは独立しており、リクエストのアクション結果も互いに独立しているため、このアクションを並行して実行できます。最初に私が試した
foreach(var request in queue.Values)
Parallel.Invoke(() =>PerformAction(request);
次に、同じforeachを試しました。
var task = new Task(() => PerformAction(request));
task.Start();
そして私が持っているforeachの外
Task.WaitAll();
プログラムを実行すると、parallel.invoke の完了に約 3 秒かかりましたが、Task の完了には約 0.005 秒かかりました。
次の質問があります。
- 並列呼び出しがタスクよりも時間がかかったのはなぜですか? 私が望んでいたように、並列呼び出しが並列モードで実行されなかったようです。
- Task を使用している場合、リクエストごとに新しい Task を作成しています。リクエストが 1000 リクエストの場合、最終的に 1000 スレッドを作成することになりますか、それとも CPU が必要に応じてスレッドの作成を処理しますか?
- Task.WaitAll() は、プログラムが終了する前にすべてのタスクが完了するのを待ちますか?