【发布时间】:2013-04-08 20:08:47
【问题描述】:
最近将我的嵌入式 Quartz.net 调度程序升级到 2.x,此时我不得不give up on giving my Zero Thread Schedulers unique names,现在我遇到一个问题,即(很少)尝试创建 ZT 调度程序实例的对象抛出异常,因为另一个对象已经实例化了一个 ZT 调度程序实例,并且由于我所有的 ZT 调度程序现在都有默认的“QuartzScheduler”名称,这会引发异常......
我尝试在调用MySchedFactory = new StdSchedulerFactory(properties) 后使用MySchedFactory.AllSchedulers.Count 检查调度程序计数,但StdSchedulerFactory 在实例化后立即创建ZT 调度程序实例,而不是在调用GetScheduler() 方法时创建,所以这是一个死胡同...
在实例化 StdSchedulerFactory 之前,我找不到任何其他检查现有调度程序的方法,并且正如我已经提到的,一旦实例化,它就会创建 ZT 调度程序的实例,所以我最终使用了一个 while 循环在我的 catch 块中,这只是一个可怕的解决方案,所以我希望有人知道检查现有 ZT 调度程序的更好方法......
try
{
//setting properties
MySchedFactory = new StdSchedulerFactory(properties);
BaseScheduler = schedFactory.GetScheduler();
}
catch (Exception ex)
{
var exMsg = ex.InnerException == null ?
ex.Message :
ex.Message + Environment.NewLine + ex.InnerException.Message;
while (exMsg.Contains("Scheduler with name 'QuartzScheduler' already exists"))
{
try
{
MySchedFactory = new StdSchedulerFactory(properties);
BaseScheduler = schedFactory.GetScheduler();
}
catch (Exception vex)
{
exMsg = vex.InnerException == null ?
vex.Message :
vex.Message + Environment.NewLine + vex.InnerException.Message;
}
}
}
有什么想法吗?
【问题讨论】: