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); }
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); }