2016-04-08 15 views

答えて

0

クォーツスケジューラには、一定の時間が経過した後にジョブを単独で中断する機能が組み込まれていません。

Jobs(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; 
    } 
} 

はそれが役に立てば幸い:)

関連する問題