Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.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
C# 如何使Quartz.net仅执行作业的剩余重复计数?_C#_Quartz Scheduler_Quartz.net_Quartz - Fatal编程技术网

C# 如何使Quartz.net仅执行作业的剩余重复计数?

C# 如何使Quartz.net仅执行作业的剩余重复计数?,c#,quartz-scheduler,quartz.net,quartz,C#,Quartz Scheduler,Quartz.net,Quartz,假设我们有一个作业和相应的触发器,配置如下: var jobKey = new JobKey(typeof(HelloJob).Name, typeof(HelloJob).Name); IJobDetail job = JobBuilder.Create<HelloJob>() .WithIdentity(jobKey) .RequestRecovery() .Build();

假设我们有一个作业和相应的触发器,配置如下:

var jobKey = new JobKey(typeof(HelloJob).Name, typeof(HelloJob).Name);
        IJobDetail job = JobBuilder.Create<HelloJob>()
            .WithIdentity(jobKey)
            .RequestRecovery()
            .Build();

        ITrigger trigger = TriggerBuilder.Create()
          .WithIdentity(string.Format("{0}Trigger", typeof(HelloJob).Name), typeof(HelloJob).Name)
          .StartAt(DateBuilder.FutureDate(1, IntervalUnit.Second))
          .WithSimpleSchedule(x => x
              .WithIntervalInSeconds(1)
              .WithRepeatCount(9))
          .Build();
var jobKey=new jobKey(typeof(HelloJob).Name,typeof(HelloJob).Name);
IJobDetail job=JobBuilder.Create()
.WithIdentity(作业密钥)
.RequestRecovery()
.Build();
ITrigger trigger=TriggerBuilder.Create()
.WithIdentity(string.Format(“{0}触发器”、typeof(HelloJob.Name)、typeof(HelloJob.Name)
.StartAt(DateBuilder.FutureDate(1,国际价值单位秒))
.使用SimpleSchedule(x=>x
.间隔秒(1)
.带重复计数(9))
.Build();
使用“quartz.jobStore.type=quartz.Impl.AdoJobStore.JobStoreTX,quartz”

嗯,我希望在正常情况下,这个任务执行10次,当然是这样。 问题是,如果在其生命周期中发生任何停止,我希望作业继续剩余的重复计数

例如,我在第五次执行作业时停止程序,下次运行程序时,我只想再执行作业五次,但执行了10次


我应该如何配置调度程序、作业和触发器才能执行此操作?

您可以通过存储程序执行之间的剩余计数来执行此操作:

  • 在程序“停止”时,将剩余计数保存到外部存储器(文件、数据库等) 实际上,最好的方法是在每次作业执行后执行此操作
  • 在程序“启动”中,从存储器中读取值,并在
    中使用它。使用RepeatCount()
    代替常量

确保已创建数据库对象并配置jobstores

看看这个例子。它可以帮助你


谢谢,但我正在寻找嵌入Quartz.net的解决方案。我不想处理保存和恢复数字的问题。此外,假设可能发生断电,我无法检测到程序停止。我必须在我自己的数据库中保存每个周期后每个作业的执行次数,这有点烦人。不管怎样,我对你的答案投了赞成票。如果有更好的解决方案,我们将不胜感激。