public async Task InvokeStep <TMessage>(Func <TMessage, IMessageHandlerContext, Task> sagaStepHandler, ISagaMessage message, IMessageBrokerContext context) where TMessage : IMessage { SagaContext saga = await _sagaInitializer.Initialize(message, context).ConfigureAwait(false); if (!(sagaStepHandler is null)) { await sagaStepHandler((TMessage)message, context).ConfigureAwait(false); } saga.InProgress(); context.BrokeredMessage.WithSagaStatus(saga.Status.Status); await _sagaPersister.Persist(saga, message, context).ConfigureAwait(false); }
public async Task Start <TSagaMessage>(TSagaMessage message, IMessageHandlerContext context) where TSagaMessage : ISagaMessage { SagaContext saga = await _sagaInitializer.Initialize(message, context).ConfigureAwait(false); var options = _sagaOptionsProvider.GetOptionsFor(message); var sendOptions = new SendOptions() .WithSubject(options.Description) .WithTimeToLiveInMinutes(options.MaxSagaDurationInMinutes) .WithTransactionMode(options.TransactionMode) .WithSagaId(saga.SagaId) .WithSagaStatus(saga.Status.Status); await _brokeredMessageDispatcher.Send(message, options : sendOptions).ConfigureAwait(false); saga.InProgress(); await _sagaPersister.Persist(saga, message, context).ConfigureAwait(false); }