public Task StartAsync(CancellationToken cancellationToken) { _cancellationTokenSource = new CancellationTokenSource(); _scheduler.JobManager.AddJob <EndlessLoopTask, ScheduleOnce>(); _scheduler.JobManager.AddJob <SimpleTask>(new IntervalSchedule(TimeSpan.FromSeconds(20))); _scheduler.JobManager.AddJob <SimpleTask2, ScheduleNever>(); _scheduler.JobManager.AddJob <RestrictedTask, ScheduleNever>(); _scheduler.AddRestriction(new MutexRestriction(typeof(RestrictedTask), typeof(EndlessLoopTask))); _schedulerTask = _scheduler.Start(_cancellationTokenSource.Token); return(Task.CompletedTask); }
public async Task AddOneJob_ScheduleNever_QuickStartJob_JobNotExecutedByQuickStartDueToRestriction() { _scheduler.LoopDelay = TimeSpan.FromMilliseconds(100); _scheduler.JobManager.AddJob <SimpleJob, ScheduleNever>(); _scheduler.AddRestriction(new ConcurrentJobRestriction() { MaximumParallelJobs = 0 }); var runSchedulerTask = RunScheduler(TimeSpan.FromSeconds(0.5)); var quickStartResult = await _scheduler.QuickStart <SimpleJob>(); await runSchedulerTask; quickStartResult.Should().Be(QuickStartResult.Restricted); }
public async Task AddMoreJobs_RestrictParallelExecution_ExecutesOnlyOneJobs() { _scheduler.LoopDelay = TimeSpan.FromSeconds(3); _scheduler.AddRestriction(new ConcurrentJobRestriction { MaximumParallelJobs = 1 }); _scheduler.JobManager.AddJob <SimpleJob, ScheduleOnce>(); _scheduler.JobManager.AddJob <AsyncExceptionJob, ScheduleOnce>(); await RunScheduler(TimeSpan.FromSeconds(1)); // Only one job should have been executed: var sj = _scheduler.JobHistory.GetLastJobResult(typeof(SimpleJob).FullName); var aej = _scheduler.JobHistory.GetLastJobResult(typeof(AsyncExceptionJob).FullName); var jobHistoryEntries = new[] { sj, aej }; jobHistoryEntries.Should().ContainSingle(e => e != null); jobHistoryEntries.Where(e => e == null).Should().HaveCount(1); }