如何检查现有的Quartz.net调度程序?

时间:2013-04-08 20:08:48

标签: quartz.net quartz.net-2.0

最近将我的嵌入式Quartz.net调度程序升级到2.x,此时我不得不give up on giving my Zero Thread Schedulers unique names现在我遇到一个问题(很少)尝试创建ZT调度程序实例的对象抛出异常因为另一个对象已经实例化了ZT调度程序的实例,并且因为我的所有ZT调度程序现在都具有默认的' QuartzScheduler'这引发了一个例外......

我在调用MySchedFactory.AllSchedulers.Count后尝试使用MySchedFactory = new StdSchedulerFactory(properties)检查调度程序计数,但是StdSchedulerFactory在实例化后立即创建ZT调度程序的实例,而不是GetScheduler()方法时这叫做死路一条......

在实例化StdSchedulerFactory之前,我找不到任何其他检查现有调度程序的方法,正如我已经提到的,一旦实例化,它就会创建一个ZT调度程序的实例,所以我最终使用了在我的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;
                }                    
            }
        }

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

Quartz.net调度程序必须是单例。你可以阅读here