Ejemplo n.º 1
0
 private int RestartableJobWorkerMethod(RestartableJobArgs args, CancellationToken token)
 {
     if (token.IsCancellationRequested)
     {
         return(0);
     }
     args.Counter++;
     TestContext.WriteLine("{0} starting.", args.Text);
     args.WorkStarted.Set();
     if (token.IsCancellationRequested)
     {
         TestContext.WriteLine("{0} cancellation requested.", args.Text);
         return(0);
     }
     args.Counter++;
     TestContext.WriteLine("{0} waiting.", args.Text);
     args.BackgroundWaiter.WaitOne();
     TestContext.WriteLine("{0} proceeding.", args.Text);
     args.Counter++;
     if (token.IsCancellationRequested)
     {
         TestContext.WriteLine("{0} cancellation requested.", args.Text);
         return(0);
     }
     args.Counter++;
     TestContext.WriteLine("{0} returning.", args.Text);
     return(int.Parse(args.Text));
 }
Ejemplo n.º 2
0
 public void RestartableJobTestMethod()
 {
     using (RestartableJob <RestartableJobArgs, int> job = new RestartableJob <RestartableJobArgs, int>())
     {
         RestartableJobHandler handler = new RestartableJobHandler();
         job.WorkerCanceled += handler.Job_WorkerCanceled;
         job.WorkerComplete += handler.Job_WorkerComplete;
         job.WorkerFault    += handler.Job_WorkerFault;
         using (RestartableJobArgs argsA = new RestartableJobArgs("1"))
         {
             job.Start(RestartableJobWorkerMethod, argsA);
             while (!argsA.WorkStarted.WaitOne(10))
             {
                 Collection <EventParams> eventParams;
                 if (handler.WaitOne(0, out eventParams))
                 {
                     foreach (EventParams p in eventParams)
                     {
                         TestContext.WriteLine(p.ToString());
                     }
                     Assert.Fail("Unexpected {0} event", eventParams.Last().EventName);
                 }
             }
             using (RestartableJobArgs argsB = new RestartableJobArgs("2"))
             {
                 job.Start(RestartableJobWorkerMethod, argsB);
                 while (!argsB.WorkStarted.WaitOne(10))
                 {
                     Collection <EventParams> eventParams;
                     if (handler.WaitOne(0, out eventParams))
                     {
                         foreach (EventParams p in eventParams)
                         {
                             TestContext.WriteLine(p.ToString());
                         }
                         Assert.Fail("Unexpected {0} event", eventParams.Last().EventName);
                     }
                 }
                 Assert.AreEqual(2, argsA.Counter);
                 Assert.AreEqual(2, argsB.Counter);
                 argsA.BackgroundWaiter.Set();
                 argsB.BackgroundWaiter.Set();
                 bool canceled = false, completed = false;
                 int  waitCount = 0;
                 while (!canceled && !completed)
                 {
                     Collection <EventParams> eventParams;
                     if (handler.WaitOne(1000, out eventParams))
                     {
                         foreach (EventParams p in eventParams)
                         {
                             if (p.EventName == "WorkerCanceled")
                             {
                                 if (ReferenceEquals((p.Args as WorkerEventArgs <RestartableJobArgs>).Arg, argsA) && !canceled)
                                 {
                                     canceled = true;
                                     continue;
                                 }
                             }
                             else if (p.EventName == "WorkerComplete" && ReferenceEquals((p.Args as WorkerEventArgs <RestartableJobArgs, int>).Arg, argsB) && !completed)
                             {
                                 Assert.AreEqual(2, (p.Args as WorkerEventArgs <RestartableJobArgs, int>).Result);
                                 completed = true;
                                 continue;
                             }
                             TestContext.WriteLine(p.ToString());
                             Assert.Fail("Unexpected {0} event", eventParams.Last().EventName);
                         }
                     }
                     if (waitCount == 5 && !(canceled && completed))
                     {
                         Assert.Fail((canceled) ? "Did not get completed event." : ((completed) ? "Did not get canceled event." : "Did not get expected events."));
                     }
                 }
                 Assert.AreEqual(3, argsA.Counter);
                 Assert.AreEqual(4, argsB.Counter);
             }
         }
     }
 }