async Task CaptureMessages(Func <IMessageSession, Task> operation, ExtendableOptions options)
        {
            var pendingOperations = new PendingTransportOperations();

            options.GetExtensions().Set(pendingOperations);

            await operation(rootSession).ConfigureAwait(false);

            var messageRecords  = pendingOperations.Operations.Select(o => o.ToMessageRecord(requestId, TransactionContext.AttemptId)).Cast <SideEffectRecord>().ToList();
            var messagesToCheck = pendingOperations.Operations.Select(o => o.ToCheck()).ToArray();

            await TransactionContext.AddSideEffects(messageRecords).ConfigureAwait(false);

            await messageStore.Create(messagesToCheck).ConfigureAwait(false);
        }
        public override async Task Invoke(IIncomingLogicalMessageContext context, Func <Task> next)
        {
            var transaction = context.Extensions.Get <ITransactionContext>();

            var pendingOperations = new PendingTransportOperations();

            context.Extensions.Set(pendingOperations);

            await next().ConfigureAwait(false);

            var messageRecords  = pendingOperations.Operations.Select(o => o.ToMessageRecord(context.MessageId, transaction.AttemptId)).Cast <SideEffectRecord>().ToList();
            var messagesToCheck = pendingOperations.Operations.Select(o => o.ToCheck()).ToArray();

            await transaction.AddSideEffects(messageRecords).ConfigureAwait(false);

            await messageStore.Create(messagesToCheck).ConfigureAwait(false);
        }
 public Task Create(Message[] messages)
 {
     return(impl.Create(messages));
 }