Как уже упоминалось, правильный способ "обнаружения" исключений JobExecutionException на глобальном уровне заключается в реализации и регистрации IJobListener и проверке, имеет ли параметр JobExecutionException в методе JobWasExecuted () значение! = Null.
Однако проблема, с которой я столкнулся (и, судя по дополнительному комментарию ОП, с ним тоже столкнулся), заключалась в том, что Quartz не обрабатывал исключение JobExecutionException (как и должно быть), что приводило к необработанному исключению, убивающему приложение.
До сих пор я использовал предварительно скомпилированную DLL из пакета выпуска Quartz.NET 2.0.1 (.NET3.5). Чтобы докопаться до сути проблемы, я сослался на проект / исходный код Quartz и, к моему удивлению, он вдруг заработал ?!
Интересно, что это код библиотеки Quartz , который выполняет IJob и обрабатывает исключение JobExecutionException:
try {
if (log.IsDebugEnabled) {
log.Debug("Calling Execute on job " + jobDetail.Key);
}
job.Execute(jec);
endTime = SystemTime.UtcNow();
} catch (JobExecutionException jee) {
endTime = SystemTime.UtcNow();
jobExEx = jee;
log.Info(string.Format(CultureInfo.InvariantCulture, "Job {0} threw a JobExecutionException: ", jobDetail.Key), jobExEx);
} catch (Exception e) {
// other stuff here...
}
Следующим шагом была прямая ссылка на мою недавно скомпилированную DLL, и это тоже работало. К сожалению, я не могу сказать вам, почему это работает, и в настоящее время у меня нет времени вдаваться в подробности, но, возможно, это кому-то поможет. Может быть, кто-то еще может подтвердить это и даже дать объяснение. Это может быть связано с разными целевыми платформами (x86 / 64bit)?