我第一次尝试实施断路器,但它不起作用。后备政策有效,但我似乎无法达到断路器。我已经在不同的版本中尝试过这个,包括断路器的重试策略,但这似乎并不重要。我确定这是我错过的基本内容。
这是用于测试目的的代码的简化版本:
var timeoutPolicy = Policy
.TimeoutAsync(
_settings.TimeoutWhenCallingApi,
TimeoutStrategy.Pessimistic
);
var circuitBreaker = Policy
.Handle<TimeoutRejectedException>()
.CircuitBreakerAsync(
_settings.ConsecutiveExceptionsAllowedBeforeBreaking,
_settings.DurationOfBreak
)
.WrapAsync(timeoutPolicy);
policy = Policy
.Handle<Exception>()
.FallbackAsync(
async cancellationToken => { Console.WriteLine("fallback triggered"); })
.WrapAsync(circuitBreaker);
await policy.ExecuteAsync(() => Task.Delay(-1));