Exemple #1
0
        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);
        }