<PackageReference Include="Polly.Core" Version="8.6.3" />

CircuitBreakerManualControl

public sealed class 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 { [System.Runtime.CompilerServices.Nullable(0)] private sealed class RegistrationDisposable : IDisposable { private readonly CircuitBreakerManualControl _owner = owner; private readonly Func<ResilienceContext, Task> _onIsolate = onIsolate; private readonly Func<ResilienceContext, Task> _onReset = onReset; public RegistrationDisposable(CircuitBreakerManualControl owner, Func<ResilienceContext, Task> onIsolate, Func<ResilienceContext, Task> onReset) { } public void Dispose() { _owner.Remove(_onIsolate, _onReset); } } private readonly object _lock = new object(); 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 bool IsEmpty => _onIsolate.Count == 0; public CircuitBreakerManualControl() { } public CircuitBreakerManualControl(bool isIsolated) { _isolated = isIsolated; } internal IDisposable Initialize(Func<ResilienceContext, Task> onIsolate, Func<ResilienceContext, Task> onReset) { bool isolated = default(bool); lock (_lock) { _onIsolate.Add(onIsolate); _onReset.Add(onReset); isolated = _isolated; } if (isolated) { ResilienceContext arg = ResilienceContextPool.Shared.Get(default(CancellationToken)).Initialize<VoidResult>(true); onIsolate(arg).GetAwaiter().GetResult(); } return new RegistrationDisposable(this, onIsolate, onReset); } private void Remove(Func<ResilienceContext, Task> onIsolate, Func<ResilienceContext, Task> onReset) { lock (_lock) { _onIsolate.Remove(onIsolate); _onReset.Remove(onReset); } } [AsyncStateMachine(typeof(<IsolateAsync>d__10))] public Task IsolateAsync(CancellationToken cancellationToken = default(CancellationToken)) { <IsolateAsync>d__10 stateMachine = default(<IsolateAsync>d__10); 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__11))] public Task CloseAsync(CancellationToken cancellationToken = default(CancellationToken)) { <CloseAsync>d__11 stateMachine = default(<CloseAsync>d__11); 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; } } }