Использование политики Polly для повтора с загрузкой файлового потока - PullRequest
0 голосов
/ 23 февраля 2020

Я использую 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()
...