Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
C# 当Quartz计划程序位于不同时区时执行计划程序_C#_Quartz Scheduler - Fatal编程技术网

C# 当Quartz计划程序位于不同时区时执行计划程序

C# 当Quartz计划程序位于不同时区时执行计划程序,c#,quartz-scheduler,C#,Quartz Scheduler,我的应用程序有3个调度程序。从这两个设置了CST时区,另一个没有设置时区,服务器有UTC时区 我注意到它执行CST时区调度器或UTC时区调度器。i、 e.作业A每天都在运行,但作业B和作业c没有按应有的方式执行 我不确定实际的问题是什么 如果有人能帮我解决这个问题 这是我的global.asax代码: NameValueCollection properties = null; ISchedulerFactory sf = null; IScheduler sched = null; JobDe

我的应用程序有3个调度程序。从这两个设置了CST时区,另一个没有设置时区,服务器有UTC时区

我注意到它执行CST时区调度器或UTC时区调度器。i、 e.作业A每天都在运行,但作业B和作业c没有按应有的方式执行

我不确定实际的问题是什么

如果有人能帮我解决这个问题

这是我的
global.asax
代码:

NameValueCollection properties = null;
ISchedulerFactory sf = null;
IScheduler sched = null;
JobDetail jobDetail = null;
CronTrigger trigger = null;
properties = new NameValueCollection();
properties["quartz.scheduler.instanceName"] = "RemoteServer";
properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
properties["quartz.threadPool.threadCount"] = "5";
properties["quartz.threadPool.threadPriority"] = "Normal";
sf = new StdSchedulerFactory(properties);
sched = sf.GetScheduler();
sched.Start();

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(Config.SchedulerTimeZone);

jobDetail = new JobDetail("JobA", "default", typeof(JobA));
trigger = new CronTrigger("JobA", "default", Config.CronExpressionJobA);
sched.ScheduleJob(jobDetail, trigger);  

jobDetail = new JobDetail("JobB", "default", typeof(JobB));
trigger = new CronTrigger("JobB", "default", Config.CronExpressionJobB);
trigger.TimeZone = timeZoneInfo;
sched.ScheduleJob(jobDetail, trigger);  //CST TimeZone

jobDetail = new JobDetail("JobC", "default", typeof(JobC));
trigger = new CronTrigger("JobC", "default", Config.CronExpressionJobC);
trigger.TimeZone = timeZoneInfo;
sched.ScheduleJob(jobDetail, trigger);  //CST TimeZone
配置值:

SchedulerTimeZone = "Central Standard Time";                
CronExpressionJobA = "0 0 6 * * ? *";               
CronExpressionJobB = "0 0 4 ? * SUN *";             
CronExpressionJobC = "0 30 4 * * ? *";
用示例编辑

i、 e

作业的计划时间: 作业A:每天协调世界时早上6:00 作业B:3月1日凌晨4:00(协调世界时上午10:00) 作业C:每天CST时间上午4:30(UTC时间上午10:30)

预期行为:应执行所有三个作业

实际行为:作业A和作业C运行。但是b工作没有

可能的解决方案:

  • 由于不同的调度器时区,它将修复所有三个调度器的相同时区
  • 命名管道绑定用于使用我的服务和初始化调度程序,我们需要HTTP请求,因此这可能是应用程序池回收后的问题,因此,如果我们将ping调度程序设置为某个间隔,那么它应该修复此问题吗

我不清楚您观察到的与您期望的是什么-您对“我注意到它执行CST时区调度器或“UTC”时区调度器的描述。即作业B每天运行”不是很清楚。@JonSkeet-我刚刚更新了我的描述。很抱歉给您带来不便。这还不太清楚,您是否可以举例说明发生了什么和预期会发生什么。当作业确实运行时,它们是否在您期望的时间运行?@JonSkeet-Job应该按计划时间运行。但事实并非如此。比方说,当作业A应在协调世界时上午6点运行,作业B应在3月1日星期日凌晨4点(协调世界时上午10点)运行时,则只有作业A运行,而作业B不运行。因此,它们从未运行,还是在错误的时间运行?所有这些信息都应该在你的问题中。