Ответ 1
Вы можете указать MaxDegreeOfParallelism
в параметре ParallelOptions
:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
У меня есть асинхронный цикл Parallel.ForEach(), с помощью которого я загружаю некоторые веб-страницы. Моя пропускная способность ограничена, поэтому я могу загружать только x страниц за раз, но Parallel.ForEach выполняет весь список желаемых веб-страниц.
Есть ли способ ограничить число потоков или любой другой ограничитель во время работы Parallel.ForEach?
Демо-код:
Parallel.ForEach(listOfWebpages, webpage => {
Download(webpage);
});
Реальная задача не имеет ничего общего с веб-страницами, поэтому креативные решения для сканирования в Интернете не помогут.
Вы можете указать MaxDegreeOfParallelism
в параметре ParallelOptions
:
Parallel.ForEach(
listOfWebpages,
new ParallelOptions { MaxDegreeOfParallelism = 4 },
webpage => { Download(webpage); }
);
MSDN: Parallel.ForEach
Вы можете использовать ParallelOptions и установить MaxDegreeOfParallelism для ограничения количества одновременных потоков:
Parallel.ForEach(listOfwebpages, new ParallelOptions{MaxDegreeOfParallelism=2}, webpage => {Download(webpage);});
Используйте другую перегрузку Parallel.Foreach
, которая принимает экземпляр ParallelOptions
и устанавливает MaxDegreeOfParallelism
, чтобы ограничить количество экземпляров параллельно.
И для пользователей VB.net(синтаксис странный и трудно найти)...
Parallel.ForEach(listOfWebpages, New ParallelOptions() With {.MaxDegreeOfParallelism = 8}, Sub(webpage)
......end sub)