Параллельная загрузка скачиваний по 0 байт и повреждение?

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

Когда я просто foreachбы список ITumblrFiles прошел и позвонил DownloadFile на всех них это сработало отлично. Но я хочу сделать это параллельно. Список содержит около 200 загрузок.

public static void DownloadFiles(IEnumerable<ITumblrFile> files, string storagePath)
{
    var tumblrFiles = files as ITumblrFile[] ?? files.ToArray();

    var tasks = tumblrFiles
        .Select(url => Task.Factory.StartNew(
            state =>
            {
                var file = (ITumblrFile)state;
                DownloadFile(file.Address, storagePath + "/" + file.Location + "/" + file.Address.Split('/').Last());
            }, url)
        )
        .ToArray();

    Task.WaitAll(tasks);
}

private static void DownloadFile(string url, string fileName)
{
    if (File.Exists(fileName))
    {
        return;
    }

    using (var webClient = new WebClient())
    {
        try
        {
            webClient.DownloadFile(url, fileName);
        }
        catch (WebException we)
        {
            if (((HttpWebResponse)we.Response).StatusCode == HttpStatusCode.NotFound)
            {
                Logger.Error("404: " + url);
            }
            else if (((HttpWebResponse)we.Response).StatusCode == HttpStatusCode.Forbidden)
            {
                Logger.Error("Forbidden: " + url);
            }
            else
            {
                Logger.Error(we.ToString());
            }
        }
    }
}

0 ответов

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