Можно создавать задачи внутри цикла, как это:Создание задач внутри цикла
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);
}
Этот код работает, но я не могу контролировать степень параллелизма (количество максимальных потоков). , и я не знаю, правильна ли эта практика или нет?
Любые причины не использовать Parallel LINQ для этого? Это звучит как более естественный подход. –
Зачем вам нужно контролировать количество потоков? –
@JonSkeet Можете ли вы помочь мне использовать P-LINQ !. Я новичок в TPL и LINQ :) –