...当作业在下一次执行时间时仍在执行时?
例如,如果我的作业每30秒发生一次,并且在30秒之后它仍在运行,那么下一个实例会发挥作用还是会等待?
答案 0 :(得分:2)
简短的回答是,除非您继承IStatefulJob,否则将执行新作业,在这种情况下,一次只允许运行一个作业实例。
答案 1 :(得分:2)
正如TskTsk回答的那样,你可以实现IJob的IStatefulJob,但是有一个问题!如果你的工作执行时间超过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);
}
}
这样,下一个作业将在第一个作业完成后不会立即执行。