Belirli bir süre sonra otomatik olarak sona eren bir Quartz Zamanlayıcı işini nasıl oluştururum (çalışma işi çok fazla zaman alıyorsa)?Quartz Zamanlayıcı İşi Otomatik Sonlandırma
1
A
cevap
0
Bir Quartz zamanlayıcı, belirli bir süre sonra bir işi kendi başına kesmek için yerleşik bir işleve sahip değildir.
İşleri kesintiye uğratmak istemiyorsanız (InterruptableJob arabirimine bakın) (örneğin, rmi ile), otomatik olarak böyle bir otomatik olarak sonlandırma yapabilirsiniz.
Ya: bir zamanlayıcı başlatırken
- , periyodik ve çekler anda çalışan işlerin bazı kesintiye gerekip gerekmediğini çalışan bir deamon-iplik çatal. Örneğin, maksimum yürütme süresini her bir iş örneği temelinde depolamak için bir JobDataMap kullanabilirsiniz.
- Her bir İş, maksimum yürütme süresini benzer şekilde kontrol edebilir.
0
Bir işi işin içinden durdurmak için en kolay yol belirli bir süre sonra bir istisna atmaktır. Örneğin:
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;
}
}
Umarım yardımcı olur :)