public async Task DoItManually() { var step1 = new FakeReceiveStep("step 1"); var step2 = new FakeReceiveStep("step 2"); var step3 = new FakeReceiveStep("step 3"); var step4 = new FakeReceiveStep("step 4"); Func <IncomingStepContext, Task> invokerFunction = context => step1.Process(context, () => { return(step2.Process(context, () => { return step3.Process(context, () => { return step4.Process(context, () => { return Task.FromResult(0); }); }); })); }); var c = GetIncomingStepContext(); await invokerFunction(c); Console.WriteLine(string.Join(Environment.NewLine, c.Load <List <string> >())); }
public void CanInvokeProcessMethodOfAnIncomingStep() { var step = new FakeReceiveStep("WOOHOO"); var processMethod = step.GetType().GetMethod("Process"); var context = GetIncomingStepContext(); var nextExpression = Expression.Lambda <Func <Task> >(Expression.Constant(Task.FromResult(0))); var stepReference = Expression.Constant(step); var contextArgument = Expression.Constant(context); var callExpression = Expression.Call(stepReference, processMethod, contextArgument, nextExpression); }