<PackageReference Include="Polly.Core" Version="8.0.0-alpha.2" />

CircuitBreakerResilienceStrategyBuilderExtensions

Circuit breaker strategy extensions for ResilienceStrategyBuilder.
using Polly.CircuitBreaker; using Polly.CircuitBreaker.Health; using Polly.Utils; using System.Runtime.CompilerServices; namespace Polly { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public static class CircuitBreakerResilienceStrategyBuilderExtensions { public static ResilienceStrategyBuilder AddAdvancedCircuitBreaker(this ResilienceStrategyBuilder builder, AdvancedCircuitBreakerStrategyOptions options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddAdvancedCircuitBreakerCore(options); } public static ResilienceStrategyBuilder<TResult> AddAdvancedCircuitBreaker<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this ResilienceStrategyBuilder<TResult> builder, AdvancedCircuitBreakerStrategyOptions<TResult> options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddAdvancedCircuitBreakerCore(options); } public static ResilienceStrategyBuilder<TResult> AddSimpleCircuitBreaker<[System.Runtime.CompilerServices.Nullable(2)] TResult>(this ResilienceStrategyBuilder<TResult> builder, SimpleCircuitBreakerStrategyOptions<TResult> options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddSimpleCircuitBreakerCore(options); } public static ResilienceStrategyBuilder AddSimpleCircuitBreaker(this ResilienceStrategyBuilder builder, SimpleCircuitBreakerStrategyOptions options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddSimpleCircuitBreakerCore(options); } private static TBuilder AddAdvancedCircuitBreakerCore<[System.Runtime.CompilerServices.Nullable(0)] TBuilder, [System.Runtime.CompilerServices.Nullable(2)] TResult>(this TBuilder builder, AdvancedCircuitBreakerStrategyOptions<TResult> options) where TBuilder : ResilienceStrategyBuilderBase { return builder.AddStrategy(delegate(ResilienceStrategyBuilderContext context) { AdvancedCircuitBehavior behavior = new AdvancedCircuitBehavior(options.FailureThreshold, options.MinimumThroughput, HealthMetrics.Create(options.SamplingDuration, context.TimeProvider)); return CircuitBreakerResilienceStrategyBuilderExtensions.CreateStrategy<TResult>(context, (CircuitBreakerStrategyOptions<TResult>)options, (CircuitBehavior)behavior); }, options); } private static TBuilder AddSimpleCircuitBreakerCore<[System.Runtime.CompilerServices.Nullable(0)] TBuilder, [System.Runtime.CompilerServices.Nullable(2)] TResult>(this TBuilder builder, SimpleCircuitBreakerStrategyOptions<TResult> options) where TBuilder : ResilienceStrategyBuilderBase { return builder.AddStrategy((ResilienceStrategyBuilderContext context) => CircuitBreakerResilienceStrategyBuilderExtensions.CreateStrategy<TResult>(context, (CircuitBreakerStrategyOptions<TResult>)options, (CircuitBehavior)new ConsecutiveFailuresCircuitBehavior(options.FailureThreshold)), options); } internal static CircuitBreakerResilienceStrategy<TResult> CreateStrategy<[System.Runtime.CompilerServices.Nullable(2)] TResult>(ResilienceStrategyBuilderContext context, CircuitBreakerStrategyOptions<TResult> options, CircuitBehavior behavior) { CircuitStateController<TResult> controller = new CircuitStateController<TResult>(options.BreakDuration, options.OnOpened, options.OnClosed, options.OnHalfOpened, behavior, context.TimeProvider, context.Telemetry); return new CircuitBreakerResilienceStrategy<TResult>(options.ShouldHandle, controller, options.StateProvider, options.ManualControl, context.IsGenericBuilder); } } }