Pathoschild/FluentHttpClient выдает ошибку для настраиваемой координации повторных попыток с использованием Polly
Я имею в виду эту https://github.com/Pathoschild/FluentHttpClient для создания настраиваемой координации повторных попыток и пытаюсь использовать Polly здесь, но я получаю ошибку ниже,
"PolicyBuilder
" не содержит определения для "Retry", а перегрузка лучшего метода расширения "RetrySyntax.Retry(PolicyBuilder, int, Action)" требует получателя типа "PolicyBuilder"
Что здесь не так?
public class PollyCoordinator : IRequestCoordinator
{
public Task<HttpResponseMessage> ExecuteAsync(IRequest request, Func<IRequest, Task<HttpResponseMessage>> dispatcher)
{
int[] retryCodes = { 408, 500, 502, 503, 504 };
return Policy
.HandleResult<HttpResponseMessage>(r => retryCodes.Contains((int)r.StatusCode))
.Retry(3, async () => await dispatcher(request));
}
}
1 ответ
Я обновил пример в файле readme FluentHttpClient. Вот фиксированная версия вашего кода:
public class PollyCoordinator : IRequestCoordinator
{
public Task<HttpResponseMessage> ExecuteAsync(IRequest request, Func<IRequest, Task<HttpResponseMessage>> send)
{
int[] retryCodes = { 408, 500, 502, 503, 504 };
return Policy
.HandleResult<HttpResponseMessage>(r => retryCodes.Contains((int)r.StatusCode)) // should we retry?
.RetryAsync(3) // up to 3 retries
.ExecuteAsync(() => send(request)); // begin handling request
}
}
Если вам нужна задержка между повторными попытками (рекомендуется), вы можете заменить RetryAsync(3)
с чем-то вроде WaitAndRetryAsync(3, attempt => TimeSpan.FromSeconds(attempt))
.