public async Task AsyncronousMacroCommand() { var cmdNoop = new DelegateCommand(() => { System.Threading.Thread.Sleep(20); return(true); }); var cmdAddNumbers = new DelegateCommand((s, c) => { var v1 = PropertyResolver.GetPropertyValue <int>(c, "Val1"); var v2 = PropertyResolver.GetPropertyValue <int>(c, "Val2"); var sum = v1 + v2; return(new BoolCommandResult(true, string.Format("Sum of {0} + {1} = {2}", v1, v2, sum))); }); var cmdMacro = new MacroCommand(); cmdMacro.Commands.Add(cmdNoop); cmdMacro.Commands.Add(cmdAddNumbers); cmdMacro.Commands.Add(cmdNoop); cmdMacro.Commands.Add(cmdAddNumbers); cmdMacro.AllowAsyncExecution = true; var contextObj = new { Val1 = 2, Val2 = 5, Result = -1 }; var cmdRes = await cmdMacro.ExecuteAsync(this.svcProvider, contextObj); Assert.IsTrue(cmdRes.IsSuccess); Assert.AreEqual(cmdRes.Description, "4 commands executed - 4 successful and 0 failed"); }