2

最近将我的嵌入式 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;
                }                    
            }
        }

有任何想法吗?

4

2 回答 2

2

将调度程序工厂的引用保留为单例而不是创建一个新的如何?

于 2013-04-09T11:44:43.573 回答
1

Quartz.net 调度程序必须是单例的。你可以在这里读到一些东西。

于 2013-04-09T11:47:23.357 回答