Func <Action <TNext>, Task> GetNextBranch <TNext>(Action <IDependencyInjectionBranchFlowNodeBuilderContext <TOutput, TNext> > caseConfigurator) { var context = new DIBranchFlowNodeBuilderContext <TOutput, TNext>(ServiceProvider); caseConfigurator(context); var a = new Func <Action <TNext>, Task>(async(done) => { TOutput v = default(TOutput); await node(output => v = output); IFlowProcessor <TOutput, TNext> processor = null; foreach (var c in context.Cases) { if (c.Key(v)) { processor = c.Value(); break; } } if (processor == null) { throw new Exception("no process match with output"); } else { await processor.ProcessAsync(v, done); } }); return(a); }
public static async Task <TOutput> Run <TInput, TOutput>(this IFlowProcessor <TInput, TOutput> processor, TInput input) { TOutput output = default(TOutput); await processor.ProcessAsync(input, o => output = o); return(output); }
public static IDependencyInjectionFlowBuilderContext <TNOutput> Then <TOutput, TNOutput>(this IDependencyInjectionFlowBuilderContext <TOutput> builder, IFlowProcessor <TOutput, TNOutput> processor) { return(builder.Then(() => processor)); }
public static IDependencyInjectionBranchFlowNodeBuilderContext <TOutput, TNext> AddCase <TOutput, TNext>(this IDependencyInjectionBranchFlowNodeBuilderContext <TOutput, TNext> builder, Func <TOutput, bool> condition, IFlowProcessor <TOutput, TNext> processor) { builder.AddCase(condition, () => processor); return(builder); }