如何获得Quartz.NET调度程序中安排的所有活动作业?我尝试了GetCurrentlyExecutingJobs()但它总是返回0.
这种方法似乎不起作用.
我找到的唯一解决方案是遍历所有工作:
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个函数JobToBeExecuted和JobWasExecutedQuartzScheduler类.