public static StepRunner <T1, TResult> AddStep <T1, T2, TResult>(this StepRunner <T1, T2> pipeline, IStep <T2, TResult> step) { StepRunner <T2, TResult> next = (StepRunner <T2, TResult>) new StepRunner <T2, TResult> { Handle = (Func <T2, PipelineContext, TResult>) delegate(T2 arg, PipelineContext context) { if (!context.IsCancelled) { return(step.Execute(arg, context)); } return(default(TResult)); } }; return(new StepRunner <T1, TResult> { Handle = (Func <T1, PipelineContext, TResult>) delegate(T1 arg, PipelineContext context) { if (!context.IsCancelled) { T2 arg2 = pipeline.Execute(arg, context); if (!context.IsCancelled) { return ((StepRunner <T2, TResult>)next).Handle(arg2, context); } return default(TResult); } return default(TResult); } }); }
public static Pipeline <Tin, Tout> Build <Tin, Tout>(this StepRunner <Tin, Tout> runner) { return(new Pipeline <Tin, Tout>(runner)); }