public async Task Send(IEventHandlingContext context, IPipe <IEventHandlingContext> next) { var eventContext = (EventHandlingContext)context; var eventHandlerInvoker = HandlerInvokerFactory <IEventHandlingContext> .GetOrCreate( eventContext.GetType(), eventContext.EventHandlerInterface); var eventHandlers = _resolverAccessor.Current.ResolveServices(eventHandlerInvoker.HandlerInterface); var handleTasks = eventHandlers? .Select(handler => eventHandlerInvoker.HandleAsync(handler, context, context.CancellationToken)) ?? Enumerable.Empty <Task>(); var tcs = new TaskCompletionSource <object>(); context.CancellationToken.Register( () => tcs.TrySetCanceled(), false); await await Task.WhenAny( Task.WhenAll(handleTasks), tcs.Task); }
public Task Send(IQueryHandlingContext context, IPipe <IQueryHandlingContext> next) { var queryContext = (QueryHandlingContext)context; var queryHandlerInvoker = HandlerInvokerFactory <IQueryHandlingContext> .GetOrCreate( queryContext.GetType(), queryContext.QueryHandlerInterface); var queryHandlerInstance = _resolverAccessor.Current.ResolveService(queryHandlerInvoker.HandlerInterface); queryContext.SetResultTask(queryHandlerInvoker.HandleAsync( queryHandlerInstance, context, context.CancellationToken)); return(queryContext.ResultTask); }
public Task Send(ICommandHandlingContext context, IPipe <ICommandHandlingContext> next) { var commandHandlerInvoker = HandlerInvokerFactory <ICommandHandlingContext> .GetOrCreate( context.GetType(), context.CommandHandlerInterface); var commandHandlerInstance = _resolverAccessor.Current.ResolveService(commandHandlerInvoker.HandlerInterface); if (context is IResultingHandlingContext resultingContext) { resultingContext.SetResultTask(commandHandlerInvoker.HandleAsync( commandHandlerInstance, context, context.CancellationToken)); return(resultingContext.ResultTask); } return(commandHandlerInvoker.HandleAsync( commandHandlerInstance, context, context.CancellationToken)); }