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> >())); }