WebClient.DownloadFileAsync не выдает исключений при сбоях HTTP-запроса. Вам нужно подписаться на событие DownloadFileCompleted , чтобы получать уведомления об ошибках.
Однако я не рекомендую возиться с обратными вызовами обработчиков событий, когда у нас есть функция асинхронного / ожидающего выполнения в C #: WebClient.DownloadFileTaskAsync гораздо удобнее в использовании.
Имея в виду ваш комментарий о параллельной обработке, вы можете сделать что-то вроде этого:
static async Task DownloadDocumentAsync(Uri uri, string fileName)
{
using (var webClient = new WebClient())
{
try
{
await webClient.DownloadFileTaskAsync(uri, fileName);
}
catch (WebException ex)
{
Log($"Downloading {uri} failed. {ex.Message}");
throw;
}
catch (InvalidOperationException)
{
Log($"Saving {uri} to {fileName} failed. File is in use.");
throw;
}
}
}
Тогда ваша логика при запуске приложения:
var baseUri = new Uri(documentsUri);
var downloadTasks = new[]
{
DownloadDocumentAsync(new Uri(baseUri, documentActivation), Path.Combine(documentspath, documentActivation)),
DownloadDocumentAsync(new Uri(baseUri, documentFloating), Path.Combine(documentspath, documentFloating)),
DownloadDocumentAsync(new Uri(baseUri, documentSeat), Path.Combine(documentspath, documentSeat)),
};
try
{
Task.WaitAll(downloadTasks);
}
catch (AggregateException)
{
// handle the case when some of the download tasks failed
}
Таким образом, задачи загрузки выполняются параллельно, но Task.WaitAll блокируется, пока все задачи не будут выполнены. Если вы хотите остаться в асинхронном режиме, вам нужно await Task.WhenAll
.