【问题标题】:Getting all the active jobs from Quartz.NET scheduler从 Quartz.NET 调度程序获取所有活动作业
【发布时间】:2011-07-11 10:31:35
【问题描述】:

如何在 Quartz.NET 调度程序中安排所有活动作业?我尝试了 GetCurrentlyExecutingJobs() 但它总是返回 0。

【问题讨论】:

  • 该方法不支持集群,因此将quartz.jobStore.clustered设置为false将返回正确的数字

标签: quartz.net


【解决方案1】:

那个方法好像不行。
我找到的唯一解决方案是遍历所有作业:

var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
    {
        string[] names = sched.GetJobNames(groups[i]);
        for (int j = 0; j < names.Length; j++)
        {
             var currentJob = sched.GetJobDetail(names[j], groups[i]);
        }
    }

找到工作时,意味着它仍然处于活动状态。 但是,如果您将作业设置为durable,则如果没有关联的触发器,它将永远不会被删除。
在这种情况下,这段代码效果更好:

var groups = sched.JobGroupNames;
for (int i = 0; i < groups.Length; i++)
    {
        string[] names = sched.GetJobNames(groups[i]);
        for (int j = 0; j < names.Length; j++)
        {
            var currentJob = sched.GetJobDetail(names[j], groups[i]);
            if (sched.GetTriggersOfJob(names[j], groups[i]).Count() > 0)
            {
                // still scheduled.
            }
        }
    }

更新

我做了一些调试来看看GetCurrentlyExecutingJobs()会发生什么。
事实上,它返回正在执行的作业,但一旦作业执行,元素就会从集合中删除。
您可以检查 QuartzScheduler 类中的 2 个函数 JobToBeExecutedJobWasExecuted

【讨论】:

  • 我想获得正在运行的作业?上述方法将返回所有暂停和运行的作业。
猜你喜欢
  • 2011-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2021-05-28
相关资源
最近更新 更多