Использование MaxDegreeOfParallelism в TPL - PullRequest
0 голосов
/ 26 июня 2018

Мы внедряем TPL (C #) в одном из наших приложений, где мы параллельно загружаем файлы на сервер. Когда мы пытаемся загрузить 15 файлов параллельно с MaxdegreeOfParallism, установленным в 4, загружаются только 12 файлов, и три файла не загружаются. Мы изменили MaxDegreeOfParallelism на 2, после чего было загружено 14 файлов. Я не уверен, как работает MaxDegreeOfParallelism. Может ли кто-нибудь прояснить использование MaxDegreeOfParallelism и что может быть причиной отсутствия обработки файлов.

Мой код

Parallel.ForEach(fileCollection,new ParallelOptions{ MaxDegreeOfParallelism = 2 },
            number => { fileNumber = UploadFile(file, response); });

Функция загрузки будет загружать файлы в AmazonS3.

Когда мы загружаем файлы с MaxDegreeOfParallelism = 1, тогда все файлы загружаются должным образом, тогда как при изменении MaxDegreeOfParallelism на 2 загружаются только 14 файлов из 15, а при изменении на 4 загружаются только 12 файлов.

Моя система разработки - четырехъядерное окно 10.

1 Ответ

0 голосов
/ 26 июня 2018

Трудно понять, с чем вам нужна помощь, если вы не предоставите некоторый код, чтобы поместить его в контекст, но в целом MaxDegreeOfParallelism суммируется в документации MSDN.

Насколько я понимаю, он используется для ограничения числа одновременных Задач до значения, которое меньше значения по умолчанию, то есть количества доступных потоков. Это может не соответствовать количеству веб-запросов, которое, как я полагаю, вас интересует, если вы просматриваете загрузку файлов.

https://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism(v=vs.110).aspx

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...