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