public async Task Send(SagaConsumeContext <TSaga, TMessage> context) { var sessionContext = context.GetPayload <MessageSessionContext>(); var proxy = new MessageSessionSagaConsumeContext <TSaga, TMessage>(context, sessionContext, context.Saga); if (_log.IsDebugEnabled) { _log.DebugFormat("SAGA:{0}:{1} Created {2}", TypeMetadataCache <TSaga> .ShortName, sessionContext.SessionId, TypeMetadataCache <TMessage> .ShortName); } try { await _next.Send(proxy).ConfigureAwait(false); if (!proxy.IsCompleted) { await _writeSagaState(sessionContext, proxy.Saga).ConfigureAwait(false); if (_log.IsDebugEnabled) { _log.DebugFormat("SAGA:{0}:{1} Saved {2}", TypeMetadataCache <TSaga> .ShortName, sessionContext.SessionId, TypeMetadataCache <TMessage> .ShortName); } } } catch (Exception) { if (_log.IsDebugEnabled) { _log.DebugFormat("SAGA:{0}:{1} Unsaved(Fault) {2}", TypeMetadataCache <TSaga> .ShortName, sessionContext.SessionId, TypeMetadataCache <TMessage> .ShortName); } throw; } }