예제 #1
0
        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.");
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }