public void run_to_completion_within_the_time() { var timeout = new JobTimeout(5.Seconds()); var job = new FakeJob(1.Seconds()); var task = timeout.Execute(job); task.Wait(); task.IsCanceled.ShouldBeFalse(); task.IsFaulted.ShouldBeFalse(); task.Exception.ShouldBeNull(); job.Finished.ShouldBeTrue(); }
public void run_over_the_allowed_time() { var timeout = new JobTimeout(1.Seconds()); var job = new FakeJob(10.Seconds()); var task = timeout.Execute(job); Exception <AggregateException> .ShouldBeThrownBy(() => { task.Wait(); }); task.Exception.InnerException.ShouldBeOfType <TimeoutException>(); job.Finished.ShouldBeFalse(); }
public Task <RescheduleRequest <T> > ToTask(IJob job, IJobRunTracker tracker) { var timeout = new JobTimeout(Timeout); return(timeout.Execute(job).ContinueWith(t => { if (t.IsFaulted) { tracker.Failure(t.Exception); throw t.Exception; } var nextTime = Scheduler.ScheduleNextTime(tracker.Now(), LastExecution); tracker.Success(nextTime); return new RescheduleRequest <T> { NextTime = nextTime }; })); }