Использование Parallel.ForEach() для длительного выполнения процесса

У меня есть реализация, как показано ниже:

  Parallel.ForEach(dtJobs.AsEnumerable(),new ParallelOptions{MaxDegreeofParalellism=5},dataRow=>

  {

       some long running process
});

Свойство MaxDegreeofParalellism=5 будет создавать только 5 потоков?

Я прав? Если нет, пожалуйста, поправьте меня..

1 ответ

Решение

От ParallelOptions.MaxDegreeOfParallelism:

Свойство MaxDegreeOfParallelism влияет на число одновременных операций, выполняемых вызовами метода Parallel, которые передаются этому экземпляру ParallelOptions. Положительное значение свойства ограничивает количество одновременных операций установленным значением. Если оно равно -1, количество одновременно выполняемых операций не ограничено.

По умолчанию For и ForEach будут использовать столько потоков, сколько обеспечивает базовый планировщик, поэтому изменение MaxDegreeOfParallelism по умолчанию ограничивает только количество одновременных задач.

Так что да, он будет максимум до 5. Он не может гарантировать, что достигнет 5, это зависит от того, сколько потоков обеспечивает базовый планировщик.

Другие вопросы по тегам