Eri*_* J. 2 quartz.net quartz.net-2.0
我正在尝试开始使用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
Run Code Online (Sandbox Code Playgroud)
为什么会失败?
我认为有两个问题。
首先,(尽管有迁移指南中的示例),我认为您需要说出触发器与哪个作业相关,例如,调用.ForJob方法。
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity("myTrigger", "My Group")
.WithDescription("My Description")
.StartAt(startTime)
.WithSimpleSchedule(x => x.WithIntervalInSeconds(10).RepeatForever())
.ForJob(job)
.Build();
Run Code Online (Sandbox Code Playgroud)
其次,用于计划作业的语法仅在先前已添加作业的情况下才有效(例如,如果您先前调用classSched.AddJob(job,true); //或classSched.AddJob(job,false);)。
如果尚未完成,则需要使用语法
classSched.ScheduleJob(job, trigger);
Run Code Online (Sandbox Code Playgroud)