Esempio n. 1
0
        public async Task ProcessAsync <TMessage>(TMessage message, Func <TMessage, ISagaContext, Task> onCompleted = null,
                                                  Func <TMessage, ISagaContext, Task> onRejected = null, ISagaContext context = null) where TMessage : class
        {
            var actions = _seeker.Seek <TMessage>().ToList();

            Task EmptyHook(TMessage m, ISagaContext ctx) => Task.CompletedTask;

            onCompleted ??= EmptyHook;
            onRejected ??= EmptyHook;

            var sagaTasks = actions
                            .Select(action => ProcessAsync(message, action, onCompleted, onRejected, context))
                            .ToList();

            await Task.WhenAll(sagaTasks);
        }
        public async Task ProcessAsync <TMessage>(TMessage message, Func <TMessage, ISagaContext, Task> onCompleted = null,
                                                  Func <TMessage, ISagaContext, Task> onRejected = null, ISagaContext context = null) where TMessage : class
        {
            var actions   = _seeker.Seek <TMessage>().ToList();
            var sagaTasks = new List <Task>();

            Task EmptyHook(TMessage m, ISagaContext ctx) => Task.CompletedTask;

            onCompleted = onCompleted ?? EmptyHook;
            onRejected  = onRejected ?? EmptyHook;

            foreach (var action in actions)
            {
                sagaTasks.Add(ProcessAsync(message, action, onCompleted, onRejected, context));
            }

            await Task.WhenAll(sagaTasks);
        }
Esempio n. 3
0
        private async Task ProcessAsync <TMessage>(Guid?id, TMessage message, ISagaContext context = null) where TMessage : class
        {
            var actions   = _sagaSeeker.Seek <TMessage>().ToList();
            var sagaTasks = new List <Task>();

            foreach (var action in actions)
            {
                var sagaType     = action.GetType();
                var sagaDataType = action
                                   .GetType()
                                   .GetInterfaces()
                                   .First(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ISaga <>))
                                   .GetGenericArguments()
                                   .First();

                sagaTasks.Add(ProcessAsync(id, sagaType, sagaDataType, message, action, context));
            }

            await Task.WhenAll(sagaTasks);
        }