Пример #1
0
        public void Sched_Task_TplFifoTest()
        {
            // This is not a great test because there's a 50/50 shot that it will work even if the scheduling
            // is completely and thoroughly broken and both closures are executed "simultaneously"
            UnitTestSchedulingContext context = new UnitTestSchedulingContext();
            OrleansTaskScheduler      orleansTaskScheduler = TestInternalHelper.InitializeSchedulerForTesting(context);
            ActivationTaskScheduler   scheduler            = orleansTaskScheduler.GetWorkItemGroup(context).TaskRunner;

            int n = 0;

            // ReSharper disable AccessToModifiedClosure
            Task task1 = new Task(() => { Thread.Sleep(1000); n = n + 5; });
            Task task2 = new Task(() => { n = n * 3; });

            // ReSharper restore AccessToModifiedClosure

            task1.Start(scheduler);
            task2.Start(scheduler);

            // Pause to let things run
            Thread.Sleep(2000);

            // N should be 15, because the two tasks should execute in order
            Assert.IsTrue(n != 0, "Work items did not get executed");
            Assert.AreEqual(15, n, "Work items executed out of order");
            Console.WriteLine("Test executed OK.");
            orleansTaskScheduler.Stop();
        }
Пример #2
0
 public void MyTestCleanup()
 {
     if (orleansTaskScheduler != null)
     {
         orleansTaskScheduler.Stop();
     }
     TraceLogger.UnInitialize();
 }
 public void Dispose()
 {
     if (orleansTaskScheduler != null)
     {
         orleansTaskScheduler.Stop();
     }
     LogManager.UnInitialize();
 }
Пример #4
0
        public void Sched_Task_SubTaskExecutionSequencing()
        {
            UnitTestSchedulingContext rootContext = new UnitTestSchedulingContext();
            OrleansTaskScheduler      scheduler   = TestInternalHelper.InitializeSchedulerForTesting(rootContext);

            UnitTestSchedulingContext context = new UnitTestSchedulingContext();

            scheduler.RegisterWorkContext(context);

            LogContext("Main-task " + Task.CurrentId);

            int n = 0;

            Action closure = () =>
            {
                LogContext("ClosureWorkItem-task " + Task.CurrentId);

                for (int i = 0; i < 10; i++)
                {
                    int    id     = -1;
                    Action action = () =>
                    {
                        id = Task.CurrentId.HasValue ? (int)Task.CurrentId : -1;

                        // ReSharper disable AccessToModifiedClosure
                        LogContext("Sub-task " + id + " n=" + n);

                        int k = n;
                        Console.WriteLine("Sub-task " + id + " sleeping");
                        Thread.Sleep(100);
                        Console.WriteLine("Sub-task " + id + " awake");
                        n = k + 1;
                        // ReSharper restore AccessToModifiedClosure
                    };
                    Task.Factory.StartNew(action).ContinueWith(tsk =>
                    {
                        LogContext("Sub-task " + id + "-ContinueWith");

                        Console.WriteLine("Sub-task " + id + " Done");
                    });
                }
            };

            IWorkItem workItem = new ClosureWorkItem(closure);

            scheduler.QueueWorkItem(workItem, context);

            // Pause to let things run
            Console.WriteLine("Main-task sleeping");
            Thread.Sleep(TimeSpan.FromSeconds(2));
            Console.WriteLine("Main-task awake");

            // N should be 10, because all tasks should execute serially
            Assert.IsTrue(n != 0, "Work items did not get executed");
            Assert.AreEqual(10, n, "Work items executed concurrently");
            scheduler.Stop();
        }
 public void Dispose()
 {
     if (orleansTaskScheduler != null)
     {
         orleansTaskScheduler.Stop();
     }
     this.loggerFactory.Dispose();
     this.performanceMetrics.Dispose();
 }
Пример #6
0
        public void Dispose()
        {
            if (orleansTaskScheduler != null)
            {
                orleansTaskScheduler.Stop();
            }

            this.runtimeStatisticsGroup.Dispose();
            this.performanceMetrics.Dispose();
            LogManager.UnInitialize();
        }
Пример #7
0
 public void Dispose()
 {
     masterScheduler.Stop();
     LogManager.UnInitialize();
 }
Пример #8
0
 public void TestCleanup()
 {
     masterScheduler.Stop();
 }
Пример #9
0
 public void Dispose()
 {
     masterScheduler.Stop();
     TraceLogger.UnInitialize();
 }