Загрузка файла - это связанный вызов ввода-вывода, который является параллельным или не первым, что вы должны удостовериться в том, что вы создаете безпоточный асинхронный вызов для загрузки одного файла. Такие методы, как Task.Run, task.Start, основаны на потоках, и они не должны использоваться для связанных вызовов ввода/вывода, иначе вы будете запускать параллельные загрузки, но сразу же заблокируете весь ваш процессор, каждое ядро, сидящее там в режиме ожидания, ждет вызов загрузки для возврата.
Вместо этого вы должны использовать шаблон async/await и ждать вашего метода загрузки async. Это безболезненно, предполагая, что у вас есть истинный метод загрузки async, но большинство библиотек это предоставляют.
Теперь, если вы распараллеливаете этот вызов ввода-вывода, сохраните все возвращенные задачи в коллекции, а в конце вы можете использовать wait. Tasks.WhenAll (tasks); ждать всех задач.
Одна вещь, которую вы также должны убедиться, что при одновременных асинхронных вызовах, связанных с вводом-выводом, не следует голодать пул соединений ввода-вывода, поэтому вы можете ограничить количество одновременных вызовов ввода-вывода, которые вы совершаете.
я реализовал Parallel Processing API, который позволяет сделать Параллельное Threadless Асинхронный вызовы с I/O Параметры регулирования и т.д.
Вы можете иметь внешний вид и использование: https://www.nuget.org/packages/ParallelProcessor/
Какие подходы вы пробовали ? Отправьте код, пожалуйста. –
что вы пробовали? вы начали два потока и выполнили веб-запрос в каждом из них или используете параллельную библиотеку .NET 4? покажите, что вы пытались сделать до сих пор. –
Отсутствие деталей затрудняет ответ. Пожалуйста, разместите код и сообщите нам, будут ли все загрузки загружены из одного и того же/разных доменов. – spender