具有暂停触发器的非并发作业的下次触发时间

时间:2014-09-03 10:11:49

标签: c# quartz.net

我希望下次将作业安排在quartz.net中执行。该作业是非并发的,可能有多个触发器,其中一些已暂停。

当作业正在执行时,状态NORMAL中的所有触发器都将设置为阻止。状态为PAUSED的所有触发器都设置为PAUSED_BLOCKED。 Quartz.net报告在作业执行时状态为PAUSED_BLOCKED的触发器为Blocked

我尝试了以下代码:

private DateTimeOffset? GetNextFireTime (JobKey jobKey)
{
    var triggers = scheduler.GetTriggersOfJob (jobKey);
    return triggers.Where (IsActive).Select (x => x.GetNextFireTimeUtc ()).Min ();
}

private bool IsActive (ITrigger trigger)
{
    return IsActive (scheduler.GetTriggerState (trigger.Key));
}

private static bool IsActive (TriggerState state)
{
    return state == TriggerState.Normal || state == TriggerState.Blocked;
}

问题是它还包括暂停的触发器,其中许多触发器在过去有下一个触发时间。我不能排除被阻止的触发器,否则我也会忽略未暂停的触发器。

使用单个火灾触发器时,问题最明显。这会导致所有其他触发器将其状态报告为blocked,但单个触发触发器会将其状态报告为Complete。如果忽略阻塞触发器,则结果是没有找到下一个触发时间。如果包含阻止触发器,则结果是暂停触发器包含,下一个触发时间在遥远的过去。

0 个答案:

没有答案