从Quartz.NET调度程序获取所有活动作业

时间:2011-07-11 10:31:35

标签: quartz.net

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

1 个答案:

答案 0 :(得分:8)

这种方法似乎不起作用 我找到的唯一解决方案是遍历所有工作:

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