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);
}
在本文档中