public void TestYieldToFiber()
 {
     using (var backgroundFiberScheduler = SystemFiberScheduler.StartNew()) {
         backgroundFiberScheduler.AllowInlining = true;
         var f1 = new Fiber(IncrementerCoroutine1());
         f1.Start(backgroundFiberScheduler);
         backgroundFiberScheduler.SchedulerThread.Join(2000);
     }
     Assert.AreEqual(yieldToFiberCounter2, yieldToFiberCounter1 * 2);
 }
        public void TestInstructionInTask()
        {
            var start = DateTime.Now;

            using (var backgroundFiberScheduler = SystemFiberScheduler.StartNew()) {
                // Submit a task to the background scheduler and wait for it to complete
                var task = new YieldableTask(new YieldForSeconds(2));
                task.RunSynchronously(new FiberTaskScheduler(backgroundFiberScheduler));
            }

            var end = DateTime.Now;

            Assert.GreaterOrEqual(end - start, TimeSpan.FromSeconds(2));
            Assert.LessOrEqual(end - start, TimeSpan.FromSeconds(3));
        }
        public void TestCancellationToken()
        {
            var start = DateTime.Now;

            var cancelSource             = new CancellationTokenSource();
            var backgroundFiberScheduler = SystemFiberScheduler.StartNew(cancelSource.Token);

            // Submit a task to the background scheduler and wait for it to complete
            var task = new YieldableTask(new YieldForSeconds(2));

            task.RunSynchronously(new FiberTaskScheduler(backgroundFiberScheduler));

            // Shutdown the scheduler thread
            cancelSource.Cancel();
            backgroundFiberScheduler.SchedulerThread.Join(5000);

            var end = DateTime.Now;

            Assert.GreaterOrEqual(end - start, TimeSpan.FromSeconds(2));
            Assert.LessOrEqual(end - start, TimeSpan.FromSeconds(3));
        }
 public void Init()
 {
     scheduler = SystemFiberScheduler.StartNew();
 }