Я использую Http Extensions для обработки кратковременных ошибок повторных попыток c. Однако я не уверен, как справиться со случаем потоковой загрузки файла, поскольку политики расширения Http возвращают объект ответа http.
В следующем коде я понимаю, что Полли обработает временную ошибку при первоначальном запросе, но если сетевое соединение прерывается во время загрузки файла, что произойдет? Насколько я понимаю, файл еще не загружен в память, когда ответ возвращается? Как лучше всего справиться с этим? Обернуть весь блок кода в пользовательскую политику повторных попыток Polly?
var response = await _transientRetryPolicy.ExecuteAsync(async () =>
{
var request = new HttpRequestMessage(HttpMethod.Get, url);
return await _client.SendAsync(request,
HttpCompletionOption.ResponseHeadersRead);
});
response.EnsureSuccessStatusCode();
using (var stream = await response.Content.ReadAsStreamAsync())
using (var fileStream = _fileSystem.FileStream.Create(destinationFileName, FileMode.Create))
{
await stream.CopyToAsync(fileStream);
}
Где политика повторных попыток определяется примерно так:
HttpPolicyExtensions.HandleTransientHttpError()
.WaitAndRetryForeverAsync()