public static void ScheduledDisposable_WillExecuteItsDisposableImplementation_OnTheSpecifiedScheduler() { Console.WriteLine("We are starting on Thread ID: " + Thread.CurrentThread.ManagedThreadId); var scheduledDisposable = new ScheduledDisposable( NewThreadScheduler.Default, Disposable.Create(() => Console.WriteLine("Disposing Thread ID: " + Thread.CurrentThread.ManagedThreadId))); Scheduler.Default.Schedule(() => { Console.WriteLine("Calling Thread ID: " + Thread.CurrentThread.ManagedThreadId); scheduledDisposable.Dispose(); }); }
public void DisposeOnScheduler() { int i = 0; var d = new ScheduledDisposable(Scheduler.ThreadPool, Disposable.Create(() => { Thread.Sleep(200); i++; })); d.Dispose(); Assert.AreEqual(0, i, "#1"); Assert.IsTrue(d.IsDisposed, "#2"); Assert.IsTrue(SpinWait.SpinUntil(() => i != 0, 1000), "#3"); d = new ScheduledDisposable(Scheduler.Immediate, Disposable.Create(() => { Thread.Sleep(200); i++; })); d.Dispose(); Assert.AreEqual(2, i, "#4"); // disposes immediately, so it must be already 2. }
public void ScheduledDisposable_Test() { // arrange var scheduler = new TestScheduler(); var innerDisposable = new BooleanDisposable(); var disp = new ScheduledDisposable(scheduler, innerDisposable); // act disp.Dispose(); // verify Assert.IsFalse(disp.IsDisposed); scheduler.AdvanceBy(1); Assert.IsTrue(disp.IsDisposed); }
public void ScheduledDisposable() { var d = new BooleanDisposable(); var s = new ScheduledDisposable(Scheduler.Immediate, d); Assert.IsFalse(d.IsDisposed); Assert.AreSame(Scheduler.Immediate, s.Scheduler); Assert.AreSame(d, s.Disposable); s.Dispose(); Assert.IsTrue(d.IsDisposed); Assert.AreSame(Scheduler.Immediate, s.Scheduler); Assert.AreSame(d, s.Disposable); }
public void ScheduledDisposable() { var d = new BooleanDisposable(); var s = new ScheduledDisposable(Scheduler.Immediate, d); Assert.False(d.IsDisposed); Assert.Same(Scheduler.Immediate, s.Scheduler); Assert.Same(d, s.Disposable); s.Dispose(); Assert.True(d.IsDisposed); Assert.True(s.IsDisposed); Assert.Same(Scheduler.Immediate, s.Scheduler); //Assert.Same(d, s.Disposable); // BREAKING CHANGE v2 > v1.x - Undefined behavior after disposal. s.Disposable.Dispose(); // This should be a nop. }