示例#1
0
        public void DisposeTest()
        {
            const int n         = 1000;
            var       def       = TestLifetime.CreateNested();
            var       scheduler = CreateSequentialScheduler("TestScheduler", def.Lifetime);
            var       count     = 0;
            var       reached   = false;

            def.Lifetime.Start(scheduler, () =>
            {
                for (var i = 0; i < n; i++)
                {
                    scheduler.Queue(() => count++);
                }
                Assert.AreEqual(0, count);
                def.Terminate();
                Assert.AreEqual(0, count);
                Assert.Throws <LifetimeCanceledException>(() => scheduler.Queue(() => reached = true));
            }).Wait();

            Assert.AreEqual(LifetimeStatus.Terminated, def.Status);

            SpinWait.SpinUntil(() => count == n, TimeSpan.FromSeconds(5));

            Assert.AreEqual(n, count);
            Assert.IsFalse(reached);
            Assert.Throws <LifetimeCanceledException>(() => scheduler.Queue(() => reached = true));
            Assert.IsFalse(reached);
        }
示例#2
0
        public void IsActiveTest()
        {
            const int n = 1000;

            using var def = TestLifetime.CreateNested();

            var scheduler1 = CreateSequentialScheduler("TestScheduler1", def.Lifetime);
            var scheduler2 = CreateSequentialScheduler("TestScheduler2", def.Lifetime);

            Assert.IsFalse(scheduler1.IsActive);
            Assert.IsFalse(scheduler2.IsActive);

            def.Lifetime.Start(scheduler1, () =>
            {
                Assert.IsTrue(scheduler1.IsActive);
                Assert.IsFalse(scheduler2.IsActive);

                def.Lifetime.Start(scheduler2, () =>
                {
                    Assert.IsFalse(scheduler1.IsActive);
                    Assert.IsTrue(scheduler2.IsActive);
                }).Wait();

                Assert.IsTrue(scheduler1.IsActive);
                Assert.IsFalse(scheduler2.IsActive);
            }).Wait();

            def.Lifetime.StartAsync(scheduler1, async() =>
            {
                Assert.IsTrue(scheduler1.IsActive);
                Assert.IsFalse(scheduler2.IsActive);

                await def.Lifetime.Start(scheduler2, () =>
                {
                    Assert.IsFalse(scheduler1.IsActive);
                    Assert.IsTrue(scheduler2.IsActive);
                });

                Assert.IsTrue(scheduler1.IsActive);
                Assert.IsFalse(scheduler2.IsActive);
            }).Wait();

            Assert.IsFalse(scheduler1.IsActive);
            Assert.IsFalse(scheduler2.IsActive);
        }