protected virtual bool CallHandler(object message, object handler, MsgHandlerInfo mhi, IMessageBus bus)
 {
     if (handler is SagaBase)
     {
         if (SagaHandler == null)
         {
             throw new PermanentMessageProcessingException("Saga support has not been enabled");
         }
         string id = null;
         if (bus != null && bus.CurrentMessageInfo != null)
         {
             id = bus.CurrentMessageInfo.CorrelationId;
         }
         bool isInitiator = mhi.InitiatedByGenericType.IsAssignableFrom(handler.GetType());
         var  b           = SagaHandler.DispatchToSaga(id, message, isInitiator, false, (SagaBase)handler, delegate(SagaBase saga)
         {
             mhi.HandleMethod(saga, message);
         });
         if (b == Sagas.SagaStateHelper.SagaDispatchResult.ConcurrentUpdateHandleLater)
         {
             //bus.HandleCurrentMessageLater(DateTime.Now.AddSeconds(1));
             //throw new Exception("Should not happen");
             throw new RetryMessageProcessingException(DateTime.Now.AddSeconds(1), "saga locked");
         }
         return(true);
     }
     else
     {
         mhi.HandleMethod(handler, message);
         return(true);
     }
 }
 protected virtual bool CallHandler(object message, object handler, MsgHandlerInfo mhi, IMessageBus bus)
 {
     if (handler is SagaBase)
     {
         if (SagaHandler == null) throw new PermanentMessageProcessingException("Saga support has not been enabled");
         string id = null;
         if (bus != null && bus.CurrentMessageInfo != null)
         {
             id = bus.CurrentMessageInfo.CorrelationId;
         }
         bool isInitiator = mhi.InitiatedByGenericType.IsAssignableFrom(handler.GetType());
         var b = SagaHandler.DispatchToSaga(id, message, isInitiator, false, (SagaBase)handler, delegate(SagaBase saga)
         {
             mhi.HandleMethod(saga, message);
         });
         if (b == Sagas.SagaStateHelper.SagaDispatchResult.ConcurrentUpdateHandleLater)
         {
             //bus.HandleCurrentMessageLater(DateTime.Now.AddSeconds(1));
             //throw new Exception("Should not happen");
             throw new RetryMessageProcessingException(DateTime.Now.AddSeconds(1), "saga locked");
         }
         return true;
     }
     else
     {
         mhi.HandleMethod(handler, message);
         return true;
     }
 }