我正在使用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配置文件来为它设置最大线程。
答案 0 :(得分:2)
将最大线程数设置为50:
var properties = new NameValueCollection { { @"quartz.threadPool.threadCount", @"50" } };
var factory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();
并且不排除WithIntervalInSeconds
,Quartz必须知道何时再次运行
答案 1 :(得分:1)
在我之前的工作中,我们将Quartz threadpool
配置如下:
quartz.threadPool.threadCount = 3
在Configuration部分了解详情。
@stuartd为您的问题here提供答案
接受他的回答,然后更改触发器以使用StartNow
方法:
var trigger = TriggerBuilder.Create()
.WithIdentity(triggerKey)
.startNow()
.build();
@SchlaWiener还使用TopShelf
提供了一个很好的解决方案。
答案 2 :(得分:0)
比起初看起来容易得多:
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);
}