Exemplo n.º 1
0
        public async Task RunPipelineAsync <TPipelineMessage>(TPipelineMessage message) where TPipelineMessage : class, IPipelineMessage
        {
            Log("PipelineMessageAsync", message);

            var pipelines = _factory.GetAsyncPipelines(message);

            if (!pipelines.Any())
            {
                return;
            }

            if (pipelines.Count > 1)
            {
                throw new MultiplePipelinesException($"{pipelines.Count} Async Pipelines found for {message.GetType().Name}");
            }

            dynamic thisPipeline = pipelines.First();

            var builder = new PipelineBuilderAsync <TPipelineMessage>();

            thisPipeline.GetPipelineTasks(builder);

            var taskTypes = builder.Get().ToList();

            if (!taskTypes.Any())
            {
                return;
            }

            var tasks = taskTypes.Select(t => (IPipelineTaskAsync <TPipelineMessage>)_factory.GetPipelineHandler(t)).ToList();

            for (var i = 0; i < tasks.Count - 1; i++)
            {
                var thisTask = tasks[i];
                var nextTask = tasks[i + 1];

                thisTask.Setup(nextTask.Run);
            }

            // Noop last task
            tasks.Last().Setup(m => Task.FromResult(0));

            // Run pipeline
            await tasks.First().Run(message).ConfigureAwait(false);
        }
Exemplo n.º 2
0
 public void GetPipelineTasks(PipelineBuilderAsync <FooBarPipelineMessage> builder)
 {
     builder.Add <FooBarPipelineTaskFooAsync>();
     builder.Add <FooBarPipelineTaskBarAsync>();
 }
 public void GetPipelineTasks(PipelineBuilderAsync <MultiplePipelineMessage> builder)
 {
 }
Exemplo n.º 4
0
 public void GetPipelineTasks(PipelineBuilderAsync <EmptyPipelineMessage> builder)
 {
 }