次のようなループ内でタスクを作成することは可能ですか:
List<Task<string>> tasks = new List<Task<string>>();
for (int id = 0; id < 1000; id++)
{
tasks.add(new Task<string>((tId) =>
{
var taskId = (int)tId;
var rand = new Random(taskId);
long sum = 0;
for (int i = 0; i < 100000; i++)
{
sum += rand.Next(1000);
}
return string.Format("Task {0}: {1}", taskId, sum) ;
}, id));
}
次に、次のようにすべてのタスクを開始します。
foreach (var task in tasks)
{
task.Start();
}
次に、すべてが完了するのを待ちます。
Task.WaitAll(tasks.ToArray());
次に、結果を収集します。
foreach (var task in tasks)
{
Console.WriteLine(task.Result);
}
このコードは機能していますが、並列度 (最大スレッド数) を制御できません。この慣行が正しいかどうかわかりませんか?