Common
A library of common classes.
Pipeline.cs
1using System;
2using System.Collections.Generic;
3using System.Threading;
4using System.Threading.Tasks;
5
7{
11 public class Pipeline
12 {
16 public List<IPipelineStep> Steps { get; private set; } = new List<IPipelineStep>();
17
22 public Pipeline(params IPipelineStep[] steps)
23 {
24 Steps = new List<IPipelineStep>(steps);
25 }
26
33 public PipelineResults Run(Dictionary<string, object> inputs, Action<string> logger = null, CancellationToken cancellationToken = default)
34 {
35 logger?.Invoke("[Pipeline] Running pipeline...");
36 var results = new PipelineResults(inputs);
37
38 foreach (var step in Steps)
39 {
40 if (cancellationToken.IsCancellationRequested)
41 {
42 logger?.Invoke("[Pipeline] Cancelled process.");
43 return results;
44 }
45
46 if (!step.ApplyStep(results, logger, cancellationToken))
47 {
48 logger?.Invoke("[Pipeline] Pipeline failed.");
49 return results;
50 }
51 }
52
53 results.Complete();
54 logger?.Invoke("[Pipeline] Pipeline complete.");
55 return results;
56 }
57
64 public Task<PipelineResults> RunAsync(Dictionary<string, object> inputs, Action<string> logger = null, CancellationToken cancellationToken = default)
65 {
66 return Task.Run(() => Run(inputs, logger, cancellationToken));
67 }
68 }
69}
A class for chaining multiple IPipelineStep together.
Definition: Pipeline.cs:12
Task< PipelineResults > RunAsync(Dictionary< string, object > inputs, Action< string > logger=null, CancellationToken cancellationToken=default)
Runs the pipeline asynchonously.
Definition: Pipeline.cs:64
PipelineResults Run(Dictionary< string, object > inputs, Action< string > logger=null, CancellationToken cancellationToken=default)
Invokes all steps of the pipeline and returns the results.
Definition: Pipeline.cs:33
List< IPipelineStep > Steps
A list of pipeline steps.
Definition: Pipeline.cs:16
Pipeline(params IPipelineStep[] steps)
Initializes a new pipeline.
Definition: Pipeline.cs:22
A container for holding pipeline results.
An interface for creating a step of a Pipeline.