Я бы использовал PLINQ для этого и указал бы максимальную степень параллелизма следующим образом:
Я на самом деле меняю свой ответ на этот вопрос, потому что понял, что вы просто хотите обработатьнеобработанный список напрямую, и вы не делаете никакой другой фильтрации или сопоставления (где / выберите).В этом конкретном случае было бы лучше использовать Parallel :: ForEach и указать MaxDegreeOfParallelism через ParallelOptions, например, так:
int myMaxDegreeOfParallelism = 4; // read this from config maybe
Parallel.ForEach(
list,
new ParallelOptions
{
MaxDegreeOfParallelism = myMaxDegreeOfParallelism
}
item =>
{
// ... your work here ...
});
Теперь, имейте в виду, что когда вы указываете максимальное значение, подобное этому, вы предотвращаете использование PLINQ.возможность использовать любые другие ресурсы, даже если они доступны.Таким образом, если бы он работал на 8-ядерном компьютере, он никогда не использовал бы более 4-х ядер.И наоборот, если вы указали 4, это не означает, что 4 гарантированно будут выполняться одновременно в любой момент времени.Все зависит от нескольких эвристик, которые TPL использует, чтобы быть оптимальными.