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;
                }
            }