<PackageReference Include="Polly" Version="6.0.0-v6alpha0001" />

CircuitBreakerTResultSyntax

public static class CircuitBreakerTResultSyntax
Fluent API for defining a Circuit Breaker Policy.
using Polly.CircuitBreaker; using System; using System.Collections.Generic; using System.Threading; namespace Polly { public static class CircuitBreakerTResultSyntax { public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak) { Action<DelegateResult<TResult>, TimeSpan> onBreak = delegate { }; Action onReset = delegate { }; return policyBuilder.CircuitBreaker(handledEventsAllowedBeforeBreaking, durationOfBreak, onBreak, onReset); } public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action<DelegateResult<TResult>, TimeSpan> onBreak, Action onReset) { return policyBuilder.CircuitBreaker(handledEventsAllowedBeforeBreaking, durationOfBreak, delegate(DelegateResult<TResult> outcome, TimeSpan timespan, Context context) { onBreak(outcome, timespan); }, delegate { onReset(); }); } public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action<DelegateResult<TResult>, TimeSpan, Context> onBreak, Action<Context> onReset) { Action onHalfOpen = delegate { }; return policyBuilder.CircuitBreaker(handledEventsAllowedBeforeBreaking, durationOfBreak, onBreak, onReset, onHalfOpen); } public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action<DelegateResult<TResult>, TimeSpan> onBreak, Action onReset, Action onHalfOpen) { return policyBuilder.CircuitBreaker(handledEventsAllowedBeforeBreaking, durationOfBreak, delegate(DelegateResult<TResult> outcome, TimeSpan timespan, Context context) { onBreak(outcome, timespan); }, delegate { onReset(); }, onHalfOpen); } public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action<DelegateResult<TResult>, TimeSpan, Context> onBreak, Action<Context> onReset, Action onHalfOpen) { return policyBuilder.CircuitBreaker(handledEventsAllowedBeforeBreaking, durationOfBreak, delegate(DelegateResult<TResult> outcome, CircuitState state, TimeSpan timespan, Context context) { onBreak(outcome, timespan, context); }, onReset, onHalfOpen); } public static CircuitBreakerPolicy<TResult> CircuitBreaker<TResult>(this PolicyBuilder<TResult> policyBuilder, int handledEventsAllowedBeforeBreaking, TimeSpan durationOfBreak, Action<DelegateResult<TResult>, CircuitState, TimeSpan, Context> onBreak, Action<Context> onReset, Action onHalfOpen) { if (handledEventsAllowedBeforeBreaking <= 0) throw new ArgumentOutOfRangeException("handledEventsAllowedBeforeBreaking", "Value must be greater than zero."); if (durationOfBreak < TimeSpan.Zero) throw new ArgumentOutOfRangeException("durationOfBreak", "Value must be greater than zero."); if (onBreak == null) throw new ArgumentNullException("onBreak"); if (onReset == null) throw new ArgumentNullException("onReset"); if (onHalfOpen == null) throw new ArgumentNullException("onHalfOpen"); ICircuitController<TResult> breakerController = (ICircuitController<TResult>)new ConsecutiveCountCircuitController<TResult>(handledEventsAllowedBeforeBreaking, durationOfBreak, onBreak, onReset, onHalfOpen); return new CircuitBreakerPolicy<TResult>((Func<Func<Context, CancellationToken, TResult>, Context, CancellationToken, TResult>)((Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) => CircuitBreakerEngine.Implementation<TResult>(action, context, cancellationToken, (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (ICircuitController<TResult>)breakerController)), (IEnumerable<ExceptionPredicate>)policyBuilder.ExceptionPredicates, (IEnumerable<ResultPredicate<TResult>>)policyBuilder.ResultPredicates, (ICircuitController<TResult>)breakerController); } } }