2016-04-08 90 views

回答

0

石英调度程序没有内置的功能来在给定的时间量之后自行中断作业。

如果您不想中断作业(请参阅InterruptableJob接口)手动(例如与rmi),您可以轻松地建立这样的自动终止。

或者:

  1. 当开始调度,叉定期并检查是否一些当前正在运行的作业必须中断运行的守护进程线程。例如,您可以使用JobDataMap以每个作业实例为基础存储最大执行时间。
  2. 每个作业都可以用类似的方式控制其最大执行时间。
0

要停止作业内部的作业,最简单的方法是在特定时间后抛出异常。例如:

public class MyJob : IJob 
{ 
    Timer _t; 

    public MyJob() 
    { 
     TimeSpan maxRunningTime = TimeSpan.FromMinutes(1); 
     _t = new Timer(delegate { throw new JobExecutionException("took to long"); }, null, (int) maxRunningTime.TotalMilliseconds, 
      -1); 
    } 

    public void Execute(IJobExecutionContext context) 
    { 
     // do your word 
     // destroy T before leaving 

     _t = null; 
    } 
} 

希望它能帮助:)