環境
C# 7.0
.NET Framework 4.6.1
※質問の内容が悪かったようなので、コードを更新しました。
以下コードにて、Web上をクロールしながら、
並行してCSVのダウンロードを行おうとしています。
C#
1var taskList = new List<Task<bool>>(); 2while(true){ 3 webをクロールする処理 4 taskList.Add(Task.Run(()=> CSVファイルをダウンロードする処理)); 5 終了条件を満たすとbreak 6} 7Task.WaitAll(taskList);
CSVをダウンロードする処理は、クロール中も並行して行い、
クロール完了後にダウンロードが残っている場合には、終了を待機します。
上記のコードで要件は満たしているのですが、スペックの低いPCで実行するため、
CSVファイルをダウンロードする処理が複数並列して走らないようにしたいです。
また、可能であれば、CSVファイルのダウンロードは、taskListに追加した順に実行したいです。
イメージとしては、1つのスレッドに対して、ダウンロードのキューを追加していきたいです。
===
以下、元の質問
以下のコードにて、ループで実行したい処理を100回回し切ったのちに、
100個の重い処理が全て完了するまで待機しています。
C#
1var taskList = new List<Task<bool>>(); 2for(int i = 0; i < 100; i++){ 3 ループで実行したい処理 4 taskList.Add(Task.Run(()=> 重い処理)); 5} 6Task.WaitAll(taskList);
上記のコードの場合、スレッドプールからスレッドが割り当てられ、重い処理が並列実行されてしまいます。
tasklistの100個のタスクを、直列に実行するにはどうしたら良いでしょうか。
※単に重い処理をawaitで待ってしまうと、重い処理に引きずられてループで実行したい処理も待機してしまいます。
よろしくお願いします。