Параллельная загрузка скачиваний по 0 байт и повреждение?
Я столкнулся с проблемой, когда все мои изображения и видео загружаются с 0 байтами, а затем становятся поврежденными при попытке их открыть. Это началось только тогда, когда я начал загружать их параллельно.
Когда я просто foreach
бы список ITumblrFile
s прошел и позвонил 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());
}
}
}
}