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

CircuitBreakerResiliencePipelineBuilderExtensions

Circuit breaker extensions for ResiliencePipelineBuilder.
using Polly.CircuitBreaker; using Polly.CircuitBreaker.Health; using Polly.Utils; using System.Diagnostics.CodeAnalysis; using System.Runtime.CompilerServices; namespace Polly { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] public static class CircuitBreakerResiliencePipelineBuilderExtensions { [System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "All options members preserved.")] [System.Diagnostics.CodeAnalysis.DynamicDependency(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All, typeof(CircuitBreakerStrategyOptions))] public static ResiliencePipelineBuilder AddCircuitBreaker(this ResiliencePipelineBuilder builder, CircuitBreakerStrategyOptions options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddStrategy((StrategyBuilderContext context) => CreateStrategy(context, options), options); } [System.Diagnostics.CodeAnalysis.UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "All options members preserved.")] public static ResiliencePipelineBuilder<TResult> AddCircuitBreaker<[System.Runtime.CompilerServices.Nullable(2)] [System.Diagnostics.CodeAnalysis.DynamicallyAccessedMembers(System.Diagnostics.CodeAnalysis.DynamicallyAccessedMemberTypes.All)] TResult>(this ResiliencePipelineBuilder<TResult> builder, CircuitBreakerStrategyOptions<TResult> options) { Guard.NotNull(builder, "builder"); Guard.NotNull(options, "options"); return builder.AddStrategy((StrategyBuilderContext context) => CircuitBreakerResiliencePipelineBuilderExtensions.CreateStrategy<TResult>(context, options), options); } internal static CircuitBreakerResilienceStrategy<TResult> CreateStrategy<[System.Runtime.CompilerServices.Nullable(2)] TResult>(StrategyBuilderContext context, CircuitBreakerStrategyOptions<TResult> options) { AdvancedCircuitBehavior behavior = new AdvancedCircuitBehavior(options.FailureRatio, options.MinimumThroughput, HealthMetrics.Create(options.SamplingDuration, context.TimeProvider)); CircuitStateController<TResult> controller = new CircuitStateController<TResult>(options.BreakDuration, options.OnOpened, options.OnClosed, options.OnHalfOpened, (CircuitBehavior)behavior, context.TimeProvider, context.Telemetry); return new CircuitBreakerResilienceStrategy<TResult>(options.ShouldHandle, controller, options.StateProvider, options.ManualControl); } } }