У меня есть IAsyncPolicy<HttpResponseMessage>
, который является оболочкой двух политик timeoutPolicy
и waitAndRetryPolicy
, которые я возвращаю с переменной asyncPolicy
.
Теперь у меня есть другая политика fallbackForCircuitBreaker
, которую я хочу обернуть asyncPolicy
, но это дает мне ошибку ниже,
'IAsyncPolicy ‹HttpResponseMessage>' не содержит определения для 'WrapAsync', а перегрузка лучшего метода расширения 'IAsyncPolicyPolicyWrapExtensions.WrapAsync‹ HttpResponseMessage> (IAsyncPolicy, IAsyncPolicy type' IAsyncPolicy) требует получателя типа IAsyncPolicy.
Что это значит и как решить?
static void Main(string[] args)
{
var asyncPolicy = CreateDefaultRetryPolicy();
var fallbackForCircuitBreaker = Policy<bool>
.Handle<BrokenCircuitException>()
.OrInner<BrokenCircuitException>()
.Fallback(fallbackValue: false, onFallback: (b, context) => { Console.WriteLine("test"); });
var X = asyncPolicy.WrapAsync<HttpResponseMessage>(fallbackForCircuitBreaker);
Console.ReadKey();
}
public static IAsyncPolicy<HttpResponseMessage> CreateDefaultRetryPolicy()
{
var timeoutPolicy = Policy.TimeoutAsync(TimeSpan.FromSeconds(180));
var waitAndRetryPolicy = Polly.Policy
.Handle<HttpRequestException>()
.OrResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.InternalServerError)
.WaitAndRetryAsync(3, retryAttempt => TimeSpan.FromSeconds(Math.Pow(3, retryAttempt)),
(result, timeSpan, context) =>{});
return timeoutPolicy.WrapAsync(waitAndRetryPolicy);
}