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;
}
}
}