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

AsyncCircuitBreakerPolicy

A circuit-breaker policy that can be applied to async delegates.
using Polly.Utilities; using System; using System.Threading; using System.Threading.Tasks; namespace Polly.CircuitBreaker { public class AsyncCircuitBreakerPolicy : AsyncPolicy, ICircuitBreakerPolicy, IsPolicy { internal readonly ICircuitController<EmptyStruct> _breakerController; public CircuitState CircuitState => _breakerController.CircuitState; public Exception LastException => _breakerController.LastException; internal AsyncCircuitBreakerPolicy(PolicyBuilder policyBuilder, ICircuitController<EmptyStruct> breakerController) : base(policyBuilder) { _breakerController = breakerController; } public void Isolate() { _breakerController.Isolate(); } public void Reset() { _breakerController.Reset(); } protected override async Task<TResult> ImplementationAsync<TResult>(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext) { TResult result = (TResult)default(TResult); await AsyncCircuitBreakerEngine.ImplementationAsync<EmptyStruct>((Func<Context, CancellationToken, Task<EmptyStruct>>)async delegate(Context ctx, CancellationToken ct) { result = (TResult)(await action(ctx, ct).ConfigureAwait(continueOnCapturedContext)); return EmptyStruct.Instance; }, context, cancellationToken, continueOnCapturedContext, base.ExceptionPredicates, ResultPredicates<EmptyStruct>.None, _breakerController).ConfigureAwait(continueOnCapturedContext); return (TResult)result; } } }