как создать политику в Polly для поддержки заголовка HTTP-ответа retry-after

Я пытаюсь создать Polly политику для поддержки http response retry-after header

 var retryAfterPolicy = Policy
               .HandleResult<HttpResponseMessage>(r => r?.Headers?.RetryAfter != null)
               .WaitAndRetryAsync(retryCount: retryAttemptsBeforeBreaking,
                                    sleepDurationProvider: (count, response, context) => GetServerWaitDuration(response)
                );

Приведенный выше код дает мне ошибку,

PolicyBuilder не содержит определения для WaitAndRetryAsync, а для перегрузки лучшего метода расширения RetrySyntaxAsync.WaitAndRetryAsync (PolicyBuilder, int, Func) требуется получатель типа PolicyBuilder.

Как поддержать это, и я должен обернуть это другой политикой, такой как circuitBreakerPolicy?


person user584018    schedule 13.11.2019    source источник
comment
Это как если бы вы запутались и использовали параметры Json, например, в стиле Python: retryCount: retryAttemptsBeforeBreaking в вашем C #   -  person Jeremy Thompson    schedule 13.11.2019


Ответы (1)


Обновите свой код, как показано ниже, он должен работать

var retryAfterPolicy = Policy
    .HandleResult<HttpResponseMessage>(r => r?.Headers?.RetryAfter != null)
    .WaitAndRetryAsync(
        3, 
        i => TimeSpan.FromSeconds(2), 
        (result, timeSpan, retryCount, context) =>
            {
                _logger.LogCritical($"Request failed with {result.Result.StatusCode}. Waiting {timeSpan} before next retry. Retry attempt {retryCount}");
            });

person BV Winoya    schedule 13.11.2019
comment
Спасибо. Это работает, но как рассчитать время после повторной попытки? - person user584018; 13.11.2019
comment
Обсуждается в документации Polly: github.com/App-vNext/Polly/wiki/ - person mountain traveller; 13.11.2019