2

我正在尝试开始使用 Quartz.Net 2.0。一个非常简单的测试应用程序失败了SchedulerException

触发器的相关作业名称不能为空

代码改编自版本 2.0迁移指南

ISchedulerFactory schedFact = new StdSchedulerFactory();
IScheduler classSched = schedFact.GetScheduler();
classSched.Start();
IJobDetail job = JobBuilder.Create<ClassificationJob>()
                    .WithIdentity("myJob", "My Group")
                    .WithDescription("My Description")
                    .Build();

TimeZoneInfo tzUtc = TimeZoneInfo.Utc;
DateTime startTime;

startTime = DateTime.UtcNow;

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "My Group")
    .WithDescription("My Description")
    .StartAt(startTime)
    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
    .Build();

classSched.ScheduleJob(trigger); // Exception on this line

为什么会失败?

4

1 回答 1

6

我认为有两个问题。

首先,(尽管迁移指南中有示例),我认为您需要说明触发器与哪个作业相关,即调用 .ForJob 方法,例如

ITrigger trigger = TriggerBuilder.Create()
    .WithIdentity("myTrigger", "My Group")
    .WithDescription("My Description")
    .StartAt(startTime)
    .WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
    .ForJob(job)
    .Build();

其次,您用于安排作业的语法只有在作业之前已添加时才有效(例如,如果您之前调用过 classSched.AddJob(job,true); // 或 classSched.AddJob(job,false);

如果这还没有完成,那么您需要使用语法

  classSched.ScheduleJob(job, trigger); 
于 2013-03-26T11:39:04.580 回答