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

VJA*_*JAI 8 quartz.net

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

Lef*_*tyX 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]);
        }
    }
Run Code Online (Sandbox Code Playgroud)

找到作业后,表示它仍处于活动状态.但是,如果将作业设置为持久,则如果没有关联的触发器,则永远不会删除它.
在这种情况下,此代码更好:

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.
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

更新:

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