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);
        }
Beispiel #3
0
 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);
 }