Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Quartz.Net中计划多个作业_.net_Quartz.net - Fatal编程技术网

在Quartz.Net中计划多个作业

在Quartz.Net中计划多个作业,.net,quartz.net,.net,Quartz.net,我是Quartz.Net的初学者。 如何在计划程序中添加多个作业 为了便于学习,我正在使用控制台应用程序。您想要完成的事情非常简单: isSchedulerFactory schFactory=new StdSchedulerFactory(); isScheduler sch=schFactory.GetScheduler(); sch.Start(); //重复下面的代码,找到你想要的工作 //为他们创造就业机会和触发因素。 //如果它们同时开火,只需要一个点火器。。。。。 IJobDeta

我是Quartz.Net的初学者。 如何在计划程序中添加多个作业


为了便于学习,我正在使用控制台应用程序。

您想要完成的事情非常简单:

isSchedulerFactory schFactory=new StdSchedulerFactory();
isScheduler sch=schFactory.GetScheduler();
sch.Start();
//重复下面的代码,找到你想要的工作
//为他们创造就业机会和触发因素。
//如果它们同时开火,只需要一个点火器。。。。。
IJobDetail job=JobBuilder.Create()
.WithIdentity(“我的工作”,null)
.Build();
ITrigger触发器=触发器生成器
.Create()
.WithSchedule(SimpleScheduleBuilder.RepeatMinutelyForever())
.ForJob(job)
.WithIdentity(job.Key.Name+“触发器”)
.Build();
sch.AddJob(触发器);

如果您是Quartz.Net新手,我建议您从Jay Villata和旧版开始,在那里您可以找到大量关于Quartz.Net的教程和有用的信息

如果要在控制台应用程序中调度多个作业,只需调用
调度程序.ScheduleJob
isScheduler)传递作业和先前创建的触发器即可:

IJobDetail firstJob = JobBuilder.Create<FirstJob>()
               .WithIdentity("firstJob")
               .Build();

ITrigger firstTrigger = TriggerBuilder.Create()
                 .WithIdentity("firstTrigger")
                 .StartNow()
                 .WithCronSchedule("0 * 8-22 * * ?")
                 .Build();


IJobDetail secondJob = JobBuilder.Create<SecondJob>()
               .WithIdentity("secondJob")
               .Build();

ITrigger secondTrigger = TriggerBuilder.Create()
                 .WithIdentity("secondTrigger")
                 .StartNow()
                 .WithCronSchedule("0 0/2 * 1/1 * ? *")
                 .Build();

Scheduler.ScheduleJob(firstJob, firstTrigger);
Scheduler.ScheduleJob(secondJob, secondTrigger);
我使用这个解决方案:

IJobDetail jobDetail = JobBuilder
    .Create<ReportJob>()
    .WithIdentity("theJob")
    .Build();

ITrigger everydayTrigger = TriggerBuilder
    .Create()
    .WithIdentity("everydayTrigger")
    // fires 
    .WithCronSchedule("0 0 12 1/1 * ?")
    // start immediately
    .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
    .Build();
ITrigger yearlyTrigger = TriggerBuilder.Create()
    .WithIdentity("yearlyTrigger")
    // fires 
    .WithCronSchedule("0 0 12 1 1 ? *")
    // start immediately
    .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
    .Build();

var dictionary = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
dictionary.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger>()
                          {
                              everydayTrigger,
                              yearlyTrigger
                          });
sched.ScheduleJobs(dictionary, true);
ijobdail jobdail=作业生成器
.Create()
.具有身份(“工作”)
.Build();
ITrigger everydayTrigger=TriggerBuilder
.Create()
.WithIdentity(“everydayTrigger”)
//开火
.WithCronSchedule(“0 0 12 1/1*?”)
//立即开始
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second,DateTime.Now.Day,DateTime.Now.Month,DateTime.Now.Year))
.Build();
ITrigger yearlyTrigger=TriggerBuilder.Create()
.WithIdentity(“yearlyTrigger”)
//开火
.WithCronSchedule(“0 0 12 1*”)
//立即开始
.StartAt(DateBuilder.DateOf(DateTime.Now.Hour,DateTime.Now.Minute,DateTime.Now.Second,DateTime.Now.Day,DateTime.Now.Month,DateTime.Now.Year))
.Build();
var dictionary=newdictionary();
dictionary.Add(jobDetail,newquartz.Collection.HashSet())
{
每一天,
按年触发
});
ScheduleJobs(字典,true);

from:

它不起作用。第二个作业出现异常,因为“触发器不引用给定的作业”。你能告诉我另一件事吗。假设有两个作业以相同的间隔运行。那么我可以暂停任何一项工作一段时间,然后再让它运行吗?很高兴我帮了忙。我已经用更多信息更新了我的答案。看看
PauseJob
ResumeJob
。干杯。谢谢你的快速反应。但是上面的代码不能满足我的要求。我有一个场景,假设两个作业以相似的间隔运行,时间为30秒。然后假设一个作业由于某种原因在15秒时突然暂停,而另一个作业继续运行。现在我希望在恢复后,第一个作业应该在16秒开始,即它离开的位置。失火会有帮助吗?这个“0*8-22**”和“0/2*1/1*?*”的意思是什么@Mou:这是一个问题。您可以检查该表达式的结果。
IJobDetail jobDetail = JobBuilder
    .Create<ReportJob>()
    .WithIdentity("theJob")
    .Build();

ITrigger everydayTrigger = TriggerBuilder
    .Create()
    .WithIdentity("everydayTrigger")
    // fires 
    .WithCronSchedule("0 0 12 1/1 * ?")
    // start immediately
    .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
    .Build();
ITrigger yearlyTrigger = TriggerBuilder.Create()
    .WithIdentity("yearlyTrigger")
    // fires 
    .WithCronSchedule("0 0 12 1 1 ? *")
    // start immediately
    .StartAt(DateBuilder.DateOf(DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second, DateTime.Now.Day, DateTime.Now.Month, DateTime.Now.Year))
    .Build();

var dictionary = new Dictionary<IJobDetail, Quartz.Collection.ISet<ITrigger>>();
dictionary.Add(jobDetail, new Quartz.Collection.HashSet<ITrigger>()
                          {
                              everydayTrigger,
                              yearlyTrigger
                          });
sched.ScheduleJobs(dictionary, true);