检查作业是否存在,而不遍历所有作业

本文关键字:作业 遍历 是否 存在 检查 | 更新日期: 2023-09-27 18:27:28

我希望我的应用程序阻止在我的 Windows 服务上添加相同的作业。这意味着如果作业键存在,我想警告用户。我正在使用调度程序的CheckExists()方法,如下所示:

IScheduler sched = scheduler.GetScheduler();
IJobDetail postbagjob = JobBuilder.Create<PostbagJob>()
    .WithIdentity(jobName, jobGroup)
    .UsingJobData("CampaignId", campaignId.ToString())
    .UsingJobData("CampaignType", campaignType)
    .Build();
ITrigger postbagJobTrigger = (ICronTrigger)TriggerBuilder.Create()
    .WithIdentity(triggerName, triggerGroup)
    .WithCronSchedule(cron)
    .StartAt(DateTime.Now)
    .Build();
if (sched.CheckExists(postbagjob.Key))
{
    MsgBox.Show("Job already exists!");
}
else
{
    MsgBox.Show("It's ok. You can schedule this job.");
}

问题是这个函数接收一个JobKey作为参数。通过这一点,我假设应该已经创建了工作。所以上面的代码会给出一个异常。有没有办法在创建作业之前检查是否存在特定JobKey

我知道一种方法是遍历所有作业。但是,没有它,我们能做到吗?

检查作业是否存在,而不遍历所有作业

您可以在

不创建作业的情况下创建JobKeyJobKey 同时具有公共构造函数和公共工厂方法。

var jobKey = new JobKey(jobName, jobGroup);
if (sched.CheckExists(jobKey)) //...