示例#1
0
        public void Catch_Custom_Rethrow()
        {
            var err       = default(Exception);
            var scheduler = new MyExceptionScheduler(ex_ => err = ex_);

            var ex = new InvalidOperationException();

            scheduler.Catch <InvalidOperationException>(_ => false).Schedule(() =>
            {
                throw ex;
            });
            Assert.AreSame(ex, err);
        }
示例#2
0
        public void Catch_Custom_Unhandled()
        {
            var err       = default(Exception);
            var scheduler = new MyExceptionScheduler(ex_ => err = ex_);

            scheduler.Catch <InvalidOperationException>(_ => true).Schedule(() =>
            {
                throw new InvalidOperationException();
            });
            Assert.IsNull(err);

            var ex = new ArgumentException();

            scheduler.Catch <InvalidOperationException>(_ => true).Schedule(() =>
            {
                throw ex;
            });
            Assert.AreSame(ex, err);
        }
示例#3
0
        public void Catch_Custom_Periodic_Caught()
        {
            var err       = default(Exception);
            var scheduler = new MyExceptionScheduler(ex_ => err = ex_);

            scheduler.PeriodicStopped = new ManualResetEvent(false);

            var caught = new ManualResetEvent(false);
            var @catch = scheduler.Catch <InvalidOperationException>(_ => { caught.Set(); return(true); });
            var per    = (ISchedulerPeriodic)((IServiceProvider)@catch).GetService(typeof(ISchedulerPeriodic));

            per.SchedulePeriodic(42, TimeSpan.Zero, x =>
            {
                throw new InvalidOperationException();
            });

            scheduler.PeriodicStopped.WaitOne();
            caught.WaitOne();
            Assert.IsNull(err);
        }
示例#4
0
        public void Catch_Custom_Periodic_Uncaught2()
        {
            var err       = default(Exception);
            var done      = new ManualResetEvent(false);
            var scheduler = new MyExceptionScheduler(ex_ => { err = ex_; done.Set(); });

            scheduler.PeriodicStopped = new ManualResetEvent(false);

            var @catch = scheduler.Catch <InvalidOperationException>(_ => false);
            var per    = (ISchedulerPeriodic)((IServiceProvider)@catch).GetService(typeof(ISchedulerPeriodic));

            var ex = new InvalidOperationException();

            per.SchedulePeriodic(42, TimeSpan.Zero, x =>
            {
                throw ex;
            });

            scheduler.PeriodicStopped.WaitOne();
            done.WaitOne();
            Assert.AreSame(ex, err);
        }
示例#5
0
        public void Catch_Custom_Periodic_Regular()
        {
            var scheduler = new MyExceptionScheduler(_ => { });

            scheduler.PeriodicStopped = new ManualResetEvent(false);

            var @catch = scheduler.Catch <InvalidOperationException>(_ => true);
            var per    = (ISchedulerPeriodic)((IServiceProvider)@catch).GetService(typeof(ISchedulerPeriodic));

            var madeProgress = new ManualResetEvent(false);
            var d            = per.SchedulePeriodic(0, TimeSpan.Zero, x =>
            {
                if (x > 10)
                {
                    madeProgress.Set();
                }

                return(x + 1);
            });

            madeProgress.WaitOne();
            d.Dispose();
            scheduler.PeriodicStopped.WaitOne();
        }
示例#6
0
        public void Catch_Custom_LongRunning_Rethrow()
        {
            var err       = default(Exception);
            var scheduler = new MyExceptionScheduler(ex_ => err = ex_);

            var @catch = scheduler.Catch <InvalidOperationException>(_ => false);
            var slr    = (ISchedulerLongRunning)((IServiceProvider)@catch).GetService(typeof(ISchedulerLongRunning));

            var done = false;

            slr.ScheduleLongRunning(cancel =>
            {
                done = true;
            });
            Assert.IsTrue(done);

            var ex = new InvalidOperationException();

            slr.ScheduleLongRunning(cancel =>
            {
                throw ex;
            });
            Assert.AreSame(ex, err);
        }
示例#7
0
        public void Catch_Custom_LongRunning_Caught()
        {
            var err       = default(Exception);
            var scheduler = new MyExceptionScheduler(ex_ => err = ex_);

            var caught = false;
            var @catch = scheduler.Catch <InvalidOperationException>(_ => caught = true);
            var slr    = (ISchedulerLongRunning)((IServiceProvider)@catch).GetService(typeof(ISchedulerLongRunning));

            slr.ScheduleLongRunning(cancel =>
            {
                throw new InvalidOperationException();
            });
            Assert.IsTrue(caught);
            Assert.IsNull(err);

            var ex = new ArgumentException();

            slr.ScheduleLongRunning(cancel =>
            {
                throw ex;
            });
            Assert.AreSame(ex, err);
        }