public CircuitBreaker(CircuitBreakerSetting setting) { CheckSetting(setting); _setting = setting; _closeState = new CloseState(this, new Tuple <TimeSpan, int>(_setting.AllowFailInterval, _setting.AllowFailTimes)); _openState = new OpenState(this, _setting.HalfOpenDuration); _halfOpenState = new HalfOpenState(this, _setting.HalfOpenRequestLimit); _lockObject = new object(); MoveToCloseState(); }
public void Dispose() { if (_openState is IDisposable openState) { openState.Dispose(); _openState = null; } if (_closeState is IDisposable closeState) { closeState.Dispose(); _closeState = null; } if (_halfOpenState is IDisposable halfOpenState) { halfOpenState.Dispose(); _halfOpenState = null; } }
public void MoveToHalfOpenState() { _currentState?.Clear(); _currentState = _halfOpenState; _currentState.Initialize(); }
public void MoveToCloseState() { _currentState?.Clear(); _currentState = _closeState; _currentState.Initialize(); }