Example #1
0
        public CircuitBreaker AttemptCall(Action protectedCode)
        {
            this.exceptionFromLastAttemptCall = null;
            lock (Monitor)
            {
                state.ProtectedCodeIsAboutToBeCalled();
                if (state is OpenState)
                {
                    return(this);
                }
            }
            try
            {
                protectedCode();
            }
            catch (Exception e)
            {
                this.exceptionFromLastAttemptCall = e;
                lock (Monitor)
                {
                    state.ActUponException(e);
                }
                return(this);
            }

            lock (Monitor)
            {
                state.ProtectedCodeHasBeenCalled();
            }
            return(this);
        }