CircuitBreakerManualControl
Allows manual control of the circuit-breaker.
using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Polly.CircuitBreaker
{
[System.Runtime.CompilerServices.NullableContext(1)]
[System.Runtime.CompilerServices.Nullable(0)]
public sealed class CircuitBreakerManualControl : IDisposable
{
private readonly HashSet<Action> _onDispose = new HashSet<Action>();
private readonly HashSet<Func<ResilienceContext, Task>> _onIsolate = new HashSet<Func<ResilienceContext, Task>>();
private readonly HashSet<Func<ResilienceContext, Task>> _onReset = new HashSet<Func<ResilienceContext, Task>>();
private bool _isolated;
internal void Initialize(Func<ResilienceContext, Task> onIsolate, Func<ResilienceContext, Task> onReset, Action onDispose)
{
_onDispose.Add(onDispose);
_onIsolate.Add(onIsolate);
_onReset.Add(onReset);
if (_isolated) {
ResilienceContext context = ResilienceContext.Get(default(CancellationToken)).Initialize<VoidResult>(true);
IsolateAsync(context).GetAwaiter().GetResult();
}
}
[AsyncStateMachine(typeof(<IsolateAsync>d__5))]
internal Task IsolateAsync(ResilienceContext context)
{
<IsolateAsync>d__5 stateMachine = default(<IsolateAsync>d__5);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.context = context;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<IsolateAsync>d__6))]
public Task IsolateAsync(CancellationToken cancellationToken = default(CancellationToken))
{
<IsolateAsync>d__6 stateMachine = default(<IsolateAsync>d__6);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<CloseAsync>d__7))]
internal Task CloseAsync(ResilienceContext context)
{
<CloseAsync>d__7 stateMachine = default(<CloseAsync>d__7);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.context = context;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
[AsyncStateMachine(typeof(<CloseAsync>d__8))]
public Task CloseAsync(CancellationToken cancellationToken = default(CancellationToken))
{
<CloseAsync>d__8 stateMachine = default(<CloseAsync>d__8);
stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
stateMachine.<>4__this = this;
stateMachine.cancellationToken = cancellationToken;
stateMachine.<>1__state = -1;
stateMachine.<>t__builder.Start(ref stateMachine);
return stateMachine.<>t__builder.Task;
}
public void Dispose()
{
foreach (Action item in _onDispose) {
item();
}
_onDispose.Clear();
_onIsolate.Clear();
_onReset.Clear();
}
}
}