private void DisposeState(CircuitBreakerStateInternal existingState)
        {
            IDisposable disposable = existingState as IDisposable;

            if (disposable == null)
            {
                return;
            }

            disposable.Dispose();
        }
        private void Transitioning(CircuitBreakerStateInternal newState)
        {
            if (newState.GetType() == this.currentState.GetType())
            {
                return;
            }
            var previous = this.State;
            var args     = new CircuitBreakerStateChangedEventArgs
            {
                Previous = previous,
                Current  = newState
            };

            this.currentState = newState;
            this.OnStateChanged(args);
            this.DisposeState(previous);
        }
 public CircuitBreakerStateMachineImpl(CircuitBreakerStateInternal initialState)
 {
     this.currentState = initialState;
 }