public void TestWorkflowProgressLoopingSimple() { //IWorkContext context = new WorkContext(null, TestEnvironment.Client); // defines and executes a cyclic (looping) workflow var w = new LoopingStep(); w.Initialise(_workContext); var inp = new LoopInput { begin = 0, end = 2000 }; // loops until condition is true // start and monitor _workContext.Logger.LogDebug("Starting..."); _workContext.Logger.LogDebug("[{0}] {1}", "I", w.Progress); //LoopResult result = w.Execute(inp, TimeSpan.FromSeconds(10)); AsyncResult <WorkflowOutput <LoopResult> > ar = w.BeginExecute(inp, null); int loop = 0; while (!ar.IsCompleted) { Thread.Sleep(1000); _workContext.Logger.LogDebug("[{0}] {1}", loop, w.Progress); loop++; } LoopResult result = ar.EndInvoke().Result; _workContext.Logger.LogDebug("[{0}] {1}", "Z", w.Progress); Assert.AreEqual(2001000, result.total); _workContext.Logger.LogDebug("Complete."); }
public void TestWorkstepLoopingDelegate() { // defines and executes a cyclic (looping) workflow var w = new WorkstepBaseLoop <LoopInput, LoopData, LoopResult>( // initialiser delegate(LoopInput input) { LoopData loopData; loopData.index = input.begin; loopData.end = input.end; loopData.total = 0; return(loopData); }, // condition loopData => (loopData.index <= loopData.end), // loop body delegate(LoopData loopData) { loopData.total += loopData.index; return(loopData); }, // loop iterator delegate(ref LoopData loopData) { loopData.index++; }, // finaliser delegate(LoopData loopData) { LoopResult temp; temp.total = loopData.total; return(temp); } ); w.Initialise(_workContext); var inp = new LoopInput { begin = 0, end = 2000 }; // loops until condition is true LoopResult outp = w.Execute(inp).Result; Assert.AreEqual(2001000, outp.total); }
public void TestWorkstepLoopingOverride() { // defines and executes a cyclic (looping) workflow var w = new LoopingStep(); w.Initialise(_workContext); var inp = new LoopInput { begin = 0, end = 2000 }; // loops until condition is true LoopResult result = w.Execute(inp).Result; Assert.AreEqual(2001000, result.total); }