私はそれに144アイテムがあるキューを持っています。各キュー要素は要求です。私は並行してコードを実行しようとすることで処理のパフォーマンスを向上させようとしています。私はperformaction(request)メソッドを呼び出します。オブジェクトをインスタンス化し、そのオブジェクトに要求を渡してアクションを実行します。これらのリクエストは独立しており、リクエストのアクション結果もお互いに独立しているため、このアクションは並行して実行できます。 最初に試しましたParallel.Invoke対タスクなぜexceution時間が異なるのですか?
foreach(var request in queue.Values)
Parallel.Invoke(() =>PerformAction(request);
私は同じforeachを試しました。
var task = new Task(() => PerformAction(request));
task.Start();
とタスクを完了するために、ほとんど0.005sを取っている間、実行プログラムparallel.invokeが完了するまでに約3秒かかったときはforeachの外に、私は
Task.WaitAll();
を持っています。私は、次の質問を持っている
は:
- は、パラレルのinvokeタスクよりも時間がかかったのはなぜ?並列呼び出しは、私が望むように並列モードで実行されなかったようです。
- 私はタスクを使用しているときに、私は新しいタスクを作成していますが、1000リクエストのリクエストがあれば、1000スレッドを作成したり、CPUが必要に応じてスレッドを作成しますか?
- Task.WaitAll()は、プログラムが終了する前にすべてのタスクが完了するのを待つでしょうか?
申し訳ありません、はい私はTaskWaitAllにList of TasksをArrayに変換しました。 – Nair
メソッドは 'Task.WaitAll(params Task [] tasks)'(http://msdn.microsoft.com/en-us/library/dd270695)として定義されています。aspx)ので、 'Task.WaitAll()'は空の 'Task []'配列を待つ(予期せず)正当なC#コードです。 (実際には、OPが持っていたコードではありませんでしたが)。 –
@BradleyGraingerはい、これは私の間違いでした。一旦変換して配列リストを追加すると、正しく動作しました。 – Nair