最近将我的嵌入式 Quartz.net 调度程序升级到 2.x,此时我不得不放弃给我的零线程调度程序提供唯一名称,现在我遇到一个问题,即(很少)尝试创建 ZT 调度程序实例的对象抛出一个异常,因为另一个对象已经实例化了 ZT 调度程序的实例,并且由于我所有的 ZT 调度程序现在都有默认的“QuartzScheduler”名称,这会引发异常......
MySchedFactory.AllSchedulers.Count
我尝试在调用后检查调度程序计数,MySchedFactory = new StdSchedulerFactory(properties)
但是 StdSchedulerFactory 在实例化后立即创建 ZT 调度程序的实例,而不是在GetScheduler()
调用方法时创建,所以这是一个死胡同......
在实例化之前我找不到任何其他检查现有调度程序的方法,StdSchedulerFactory
并且正如我已经提到的,一旦它被实例化,它就会创建一个 ZT 调度程序的实例,所以我最终在我的 catch 块中使用了一个 while 循环只是一个可怕的解决方案,所以我希望有人知道检查现有 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;
}
}
}
有任何想法吗?