2016-04-08 115 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; 
    } 
} 

希望它能幫助:)