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