Делал сперва скачивание через Parallel.For
Parallel.For(0, images.Count(), new ParallelOptions { MaxDegreeOfParallelism = 10}, async (o) =>
{
new WebClient().DownloadFile...
});
Скорость мне не понравилась. Попробовал такой вариант
var tasks = new List<Task>();
Parallel.For(0, images.Count(), new ParallelOptions { MaxDegreeOfParallelism = 1}, async (o) =>
{
var f = path + GetFileName(images[o]);
tasks.Add(NewDownload(images[o], f));
});
await Task.WhenAll(tasks.ToArray());
async static Task NewDownload(string hrefLink, string filename)
{
Axi:
try
{
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(hrefLink))
using (System.Net.Http.HttpContent content = response.Content)
{
if (!File.Exists(filename))
{
using (var fs = new FileStream(filename, FileMode.CreateNew))
{
await response.Content.CopyToAsync(fs);
}
}
}
}
catch (Exception)
{
Thread.Sleep(1000);
goto Axi;
}
}
Когда tasks
было штук 40-50 всё работало очень даже быстро, но щас у меня 20k tasks
- и оно очень долгое время висит, нагружает проц и ничего не скачивает.
Подскажите что не так? Мб использовать другой вариант многопоточного скачивания файлов?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В одном из методов требуется зажатие определённой клавиши, пока верно условиеЯ использую голосовое управление в программе
Обратил внимание, что при старте проекта Win FormsNet framework все фоновые задачи успешно выполняются и заканчиваются, в то время как одна постоянно...
Мне надо чтоб метод вернул четыре значения один bool, один string и два floatЯ делаю это с помощью Dictionary<bool, string> Но Dictionary мне кажется создан для...