Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Quartz计划程序在多线程服务中不工作_.net_Multithreading_Multiprocessing_Quartz Scheduler_Quartz.net - Fatal编程技术网

.net Quartz计划程序在多线程服务中不工作

.net Quartz计划程序在多线程服务中不工作,.net,multithreading,multiprocessing,quartz-scheduler,quartz.net,.net,Multithreading,Multiprocessing,Quartz Scheduler,Quartz.net,我有一段代码,它将使用石英创造就业机会。此代码将由多个线程调用 ISchedulerFactory fac = new StdSchedulerFactory(); sched = fac.GetScheduler(); // schedele job sched.ScheduleJob(job1, trigger1); sched.Shutdown(); 有时,我在获取计划程序时会收到错误消息 名为“{0}”的计划程

我有一段代码,它将使用石英创造就业机会。此代码将由多个线程调用

 ISchedulerFactory fac = new StdSchedulerFactory();
                sched = fac.GetScheduler();

// schedele job

   sched.ScheduleJob(job1, trigger1);
                sched.Shutdown();
有时,我在获取计划程序时会收到错误消息

名为“{0}”的计划程序已存在

如果我将getscheduler逻辑移到singleton类中,正如pere在某个论坛上建议的那样,它运行良好,没有任何问题。我不知道为什么我们需要把它转移到一个单身班

我真的不明白是什么导致了这个问题

此代码将由多个线程调用

 ISchedulerFactory fac = new StdSchedulerFactory();
                sched = fac.GetScheduler();

// schedele job

   sched.ScheduleJob(job1, trigger1);
                sched.Shutdown();
这样,在实例化调度程序实例时,调用线程之间可能会出现争用条件。
应该防止创建具有相同名称的调度程序,这是合乎逻辑的。quartz中创建调度程序实例的代码可能不是线程安全的。:-)

您是否使用jmx或rmi代理远程调度器?我使用的是.Net版本的Quartzcan,请您解释一下。为什么不建议使用相同名称的多个调度程序。我在想,一旦工作完成,如果允许每个线程使用相同名称的shecduler,我就可以在那一刻关闭调度程序本身。对于singleton,我无法关闭调度程序,我必须保留调度程序,直到整个系统完全卸载。调度程序名称可能是调度程序实例的主键,这就是为什么不能创建具有相同名称的多个实例。您的并发线程正在尝试同时实例化调度程序。因此,竞争条件正在发生。您可能希望获得已创建的调度程序实例,并将其分发到并发线程。但不幸的是,这是不可能的,因为getScheduler()是石英代码。