gpt4 book ai didi

quartz-scheduler - 如何正确检测并删除无法使用 Quartz.net 恢复的作业?

转载 作者:行者123 更新时间:2023-12-04 23:57:56 25 4
gpt4 key购买 nike

由于各种正当原因,作业存储中的一些作业已经过时,无法再恢复。例如,当 Job 类在重构后不再是 .NET 程序集的一部分时。我想知道如何在调度程序启动时优雅地捕获这些问题,然后删除不可恢复的作业。

当应用程序启动时,我基本上是这样做的(略):

IScheduler scheduler = <create a scheduler and a jobstore object>

try{ scheduler.Start() } catch {}
try{ scheduler.Start() } catch {}
try{ scheduler.Start() } catch {}

如果我打电话 Start()三次,调度程序最终启动。我必须做这件骇人听闻的事情的原因是因为 Start()将为不可恢复的旧作业抛出异常。
Failure occured during job recovery.Could not load type 'MyOldClassName' from assembly 'MyAssembly'.
我想优雅地删除损坏的作业并避免这些异常。在我的实际代码中,我记录了这些异常。

有一个更好的方法吗?

最佳答案

我找到了一种方法来做到这一点。在 Start() 之前调用它可以解决问题。

    var jobs = this._scheduler.GetJobKeys(GroupMatcher<JobKey>.AnyGroup());
foreach (var jobKey in jobs)
{
try
{
// attempt to access the jobType. If it fails, then we know it's broken
Type t = _scheduler.GetJobDetail(jobKey).JobType;
}
catch (JobPersistenceException ex)
{
if (ex.InnerException != null)
{
if (ex.InnerException.GetType() == typeof(TypeLoadException))
{
_scheduler.DeleteJob(jobKey);
}
}
else
{
// log this
}
}
catch (Exception ex)
{
// log this
}
}

关于quartz-scheduler - 如何正确检测并删除无法使用 Quartz.net 恢复的作业?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26349519/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com