<PackageReference Include="Polly" Version="8.5.0" />

CircuitBreakerPolicy

A circuit-breaker policy that can be applied to delegates.
using Polly.Utilities; using System; using System.Diagnostics; using System.Threading; namespace Polly.CircuitBreaker { public class CircuitBreakerPolicy : Policy, ICircuitBreakerPolicy, IsPolicy { internal readonly ICircuitController<EmptyStruct> BreakerController; public CircuitState CircuitState => BreakerController.CircuitState; public Exception LastException => BreakerController.LastException; internal CircuitBreakerPolicy(PolicyBuilder policyBuilder, ICircuitController<EmptyStruct> breakerController) : base(policyBuilder) { BreakerController = breakerController; } public void Isolate() { BreakerController.Isolate(); } public void Reset() { BreakerController.Reset(); } [DebuggerStepThrough] protected override TResult Implementation<TResult>(Func<Context, CancellationToken, TResult> action, Context context, CancellationToken cancellationToken) { TResult result = (TResult)default(TResult); CircuitBreakerEngine.Implementation(delegate(Context ctx, CancellationToken ct) { result = (TResult)action(ctx, ct); return EmptyStruct.Instance; }, context, base.ExceptionPredicates, ResultPredicates<EmptyStruct>.None, BreakerController, cancellationToken); return (TResult)result; } } }