如何获取Quartz.NET调度程序中安排的所有活动作业?我尝试了GetCurrentlyExecutingJobs()但它总是返回0。
答案 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个函数JobToBeExecuted
和JobWasExecuted
。