结束后如何重新运行我的工作?

How to rerun my job after it's end?

我正在使用 Quartz.Net 库。我写了一些触发器:

var t = 
   TriggerBuilder.Create()
   .WithIdentity("FirstTask", "TaskGroup")
   .StartAt(DateBuilder.TodayAt(16, 17, 0))
   .EndAt(DateBuilder.TodayAt(17, 17, 0))
   .WithSimpleSchedule(x => x.RepeatForever()
                             .WithIntervalInSeconds(1))
   .Build();

如果我排除 .WithIntervalInSeconds(1) 我有一个例外,即重试时间不能为零。那么,我怎样才能在完成后重新开始我的工作呢?我也没有找到 quartz.net 配置文件来为其设置最大线程数。

要将最大线程数设置为 50:

var properties = new NameValueCollection { { @"quartz.threadPool.threadCount", @"50" } };
var factory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();

并且不排除WithIntervalInSeconds,Quartz必须知道,什么时候再运行

在我之前的工作中,我们将 Quartz threadpool 配置如下:

quartz.threadPool.threadCount = 3

Configuration 部分阅读更多相关信息。

@stuartd 回答您的问题 here
接受他的回答,然后将触发器更改为使用 StartNow 方法:

var trigger = TriggerBuilder.Create()
                            .WithIdentity(triggerKey)
                            .startNow()
                            .build();

@SchlaWiener 还使用 TopShelf.

提供了一个不错的解决方案

比最初看起来容易得多:

var job = JobBuilder.Create<HelloJob>().WithIdentity(new JobKey("Task_1", "TaskGroup")).Build();
var t = TriggerBuilder.Create()
        .WithIdentity("Trigger_1", "TaskGroup")
        .StartAt(DateBuilder.TodayAt(21, 15, 0))
        .EndAt(DateBuilder.TodayAt(21, 18, 0))
        .Build();
_scheduleService.Scheduler.ScheduleJob(job, t);

以及listiner中的实现方法:

public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
    if (DateTime.UtcNow > context.Trigger.EndTimeUtc)
        return;
    context.Scheduler.RescheduleJob(context.Trigger.Key, context.Trigger);
}