Что происходит в Quartz.NET/Quartz, когда - PullRequest
1 голос
/ 22 октября 2010

... когда задание все еще выполняется, когда наступает его следующий раз?

Например, если у меня есть задание, которое выполняется каждые 30 секунд, а через 30 секунд оно все еще работает, следующий экземпляр вступит в действие или будет ждать?

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Как ответил TskTsk, вы можете реализовать IStatefulJob вместо IJob, но есть одна загвоздка!Если у вас есть задание, которое выполняется более 30 секунд (то есть у вас есть или больше заданий, ожидающих завершения этого задания), после его выполнения все ожидающие задания будут сработать немедленно!Чтобы преодолеть это, вам нужно создать новый класс, который реализует SimpleTrigger.Этот новый класс триггера должен был переопределить GetFireTimeAfter.

public class MyTrigger : SimpleTrigger
{

    public MyTrigger(string name,
                     string group,
                     DateTime startTimeUtc,
                     DateTime? endTimeUtc,
                     int repeatCount,
                     TimeSpan repeatInterval) : base(name, startTimeUtc, endTimeUtc, repeatCount, repeatInterval)
    {
    }

    public override DateTime? GetFireTimeAfter(DateTime? afterTimeUtc)
    {
        return DateTime.UtcNow.AddSeconds(RepeatInterval.TotalSeconds);
    }

}

Таким образом, следующее задание не будет выполнено незамедлительно после завершения первого.

2 голосов
/ 03 ноября 2010

Короткий ответ: новое задание будет выполнено, если только вы не наследуете от IStatefulJob, и в этом случае одновременно разрешено запускать только один экземпляр задания.

...