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