AsyncCircuitBreakerPolicy<TResult>
public class AsyncCircuitBreakerPolicy<TResult> : AsyncPolicy<TResult>, ICircuitBreakerPolicy<TResult>, ICircuitBreakerPolicy, IsPolicy
A circuit-breaker policy that can be applied to async delegates.
using System;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.CircuitBreaker
{
public class AsyncCircuitBreakerPolicy<TResult> : AsyncPolicy<TResult>, ICircuitBreakerPolicy<TResult>, ICircuitBreakerPolicy, IsPolicy
{
internal readonly ICircuitController<TResult> BreakerController;
public CircuitState CircuitState => BreakerController.CircuitState;
public Exception LastException => BreakerController.LastException;
public TResult LastHandledResult => BreakerController.LastHandledResult;
internal AsyncCircuitBreakerPolicy(PolicyBuilder<TResult> policyBuilder, ICircuitController<TResult> breakerController)
: base(policyBuilder)
{
BreakerController = breakerController;
}
public void Isolate()
{
BreakerController.Isolate();
}
public void Reset()
{
BreakerController.Reset();
}
[DebuggerStepThrough]
protected override Task<TResult> ImplementationAsync(Func<Context, CancellationToken, Task<TResult>> action, Context context, CancellationToken cancellationToken, bool continueOnCapturedContext)
{
if (action == null)
throw new ArgumentNullException("action");
return AsyncCircuitBreakerEngine.ImplementationAsync<TResult>(action, context, continueOnCapturedContext, base.ExceptionPredicates, base.ResultPredicates, BreakerController, cancellationToken);
}
}
}