async Task RemoveNewSaga(TSaga saga, CancellationToken cancellationToken)
 {
     if (_withinLock)
     {
         _repository.RemoveWithinLock(saga);
     }
     else
     {
         await _repository.Remove(saga, cancellationToken).ConfigureAwait(false);
     }
 }
Пример #2
0
            private async Task Handle(IEvent e)
            {
                // _log.Trace($"{typeof(TSaga).Name}.When({e.EventType}[{e.Stream}])");
                _log.Trace($"{e.MessageType}", typeof(TSaga).GetFriendlyName());

                try
                {
                    var   emptySaga     = new TSaga();
                    var   id            = emptySaga.SagaId(e);
                    var   isInitializer = emptySaga.IsInitializer(e);
                    TSaga saga;
                    if (isInitializer)
                    {
                        saga = await _repository.GetOrAdd <TSaga>(id);
                    }
                    else
                    {
                        saga = await _repository.Find <TSaga>(id);
                    }

                    if (saga == null)
                    {
                        return;
                    }
                    var saveEvent = ((Event)e).Copy();

                    saga.When(saveEvent);

                    var commands = saga.GetUncommittedCommands().OfType <Command>();
                    foreach (var c in commands)
                    {
                        c.AncestorId    = e.MessageId;
                        c.CorrelationId = id;
                    }

                    await _repository.Save(saga);
                }
                catch (Exception exception)
                {
                    _log.Errors.Add(exception);
                }
            }
Пример #3
0
 public bool PreInsertInstance(ConsumeContext <TMessage> context, out TSaga instance)
 {
     return(_policy.PreInsertInstance(context, out instance));
 }