Quartz 一次性作业
您可以这样运行最简单的作业。
提示:错失触发模式:智能
预先注册作业
如果您有一组静态作业,可以使用如下方式提前注册它们。如果 durable
标志为 true
,则作业将保持休眠状态直到被触发。
public async Task DoSomething(IScheduler scheduler, CancellationToken ct) {
var job = JobBuilder.CreateAnExampleJob>()
.WithIdentity("name", "group")
.Build();
var replace = true;
var durable = true;
await scheduler.AddJob(job, replace, durable, ct);
}
稍后要触发作业,只需像下面这样调用 TriggerJob
:
public async Task DoSomething(IScheduler scheduler, CancellationToken ct) {
await scheduler.TriggerJob(new JobKey("name", "group"), ct);
}
如果您想调整 JobDataMap
:
public async Task DoSomething(IScheduler scheduler, CancellationToken ct)
{
var jobData = new JobDataMap();
await scheduler.TriggerJob(new JobKey("name", "group"), jobData, ct);
}
动态注册
在这种情况下,您可能有一组动态的作业,需要即时生成作业和触发器。
public async Task DoSomething(IScheduler scheduler, CancellationToken ct)
{
var job = JobBuilder.Create<AnExampleJob>()
.WithIdentity("name", "group")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("name", "group")
.StartNow()
.Build();
await scheduler.ScheduleJob(job, trigger, ct);
}
上述代码等同于:
public async Task DoSomething(IScheduler scheduler, CancellationToken ct)
{
var job = JobBuilder.Create<AnExampleJob>()
.WithIdentity("name", "group")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("name", "group")
.WithSimpleSchedule()
.StartNow()
.Build();
await scheduler.ScheduleJob(job, trigger, ct);
}