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(); }
public void MyTestCleanup() { if (orleansTaskScheduler != null) { orleansTaskScheduler.Stop(); } TraceLogger.UnInitialize(); }
public void Dispose() { if (orleansTaskScheduler != null) { orleansTaskScheduler.Stop(); } LogManager.UnInitialize(); }
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(); }
public void Dispose() { if (orleansTaskScheduler != null) { orleansTaskScheduler.Stop(); } this.runtimeStatisticsGroup.Dispose(); this.performanceMetrics.Dispose(); LogManager.UnInitialize(); }
public void Dispose() { masterScheduler.Stop(); LogManager.UnInitialize(); }
public void TestCleanup() { masterScheduler.Stop(); }
public void Dispose() { masterScheduler.Stop(); TraceLogger.UnInitialize(); }