Ejemplo n.º 1
0
        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.
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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.
        }