Я запускаю Задачу в списке удаленных файлов.
Для каждого файла я using
a WebClient
и выполняю webClient.DownloadFileTaskAsync(...)
.
В WebClient
DownloadProgressChangedОбработчик Я заметил, что суммирование e.BytesReceived
до завершения задачи дает намного более высокий результат, чем размер, который я получаю e.TotalBytesToReceive
.
Иногда сумма полученных байтов ровно вдвое большеразмер файла, иногда намного выше.
Размер, который я получаю с e.TotalBytesToReceive
, правильный, тот же размер, который я получаю с ResponseHeaders["Content-Length"]
, и проверяя реальный файл, я уверен, что размер правильный.
Почему я получаю эти значения?Есть ли заголовок или что-то, что я должен удалить, чтобы получить правильный ход загрузки?
Методы, которые загружают файлы:
private async Task DownloadFiles(List<FileDetails> files)
{
await Task.WhenAll(files.Select(p => DownloadFileAsync(p)));
}
и
private async Task DownloadFileAsync(FileDetails f)
{
string localPath = @"C:\myDir";
try
{
using (WebClient webClient = new WebClient())
{
webClient.DownloadProgressChanged += MyHandler;
webClient.Credentials = CredentialCache.DefaultNetworkCredentials;
await webClient.DownloadFileTaskAsync(f.Path, localPath);
}
}
catch ()
{
}
}
И код, который обрабатывает прогресс:
void MyHandler(object sender, DownloadProgressChangedEventArgs e)
{
//GlobalProgress and GlobalPercentage are global variables
//initialized at zero before the download task starts.
GlobalProgress += e.BytesReceived;
//UpdateDownloadTotal is the sum of the sizes of the
//files I have to download
GlobalPercentage = GlobalProgress * 100 / UpdateDownloadTotal;
}