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

时间:2014-10-23 07:37:04

标签: c# windows-services quartz.net job-scheduling

我希望我的应用程序阻止在我的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是否存在?

我知道这样做的方法是遍历所有工作。但是没有它我们可以做到吗?

1 个答案:

答案 0 :(得分:13)

您无需创建作业即可创建JobKeyJobKey包含公共构造函数和公共工厂方法。

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