设置并发作业的最大值 Quartz.Net
set the max of concurrent jobs Quartz.Net
在 IScheduler 对象内的服务 windows 中,每次有很多作业要 运行 。但是当您开始工作时 CPU 获得 100% 的使用率。我想限制并发作业 运行 避免过度使用资源。 objective 一次可以 运行 大约 3 个进程。或多或少类似于 multithread 中的标准 semaforo。我正在放一个代码示例来演示我是如何进行计划的:
_schedulerQuartz = StdSchedulerFactory.GetDefaultScheduler();
for(int i = 0; i <=10;i++){
TriggerBuilder triggerBuilder = TriggerBuilder.Create()
.WithIdentity("TEST"+i.toString(), "TEST"+i.toString())
.StartNow();
triggerBuilder.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(60));
ITrigger trigger = triggerBuilder.Build();
IJobDetail job = JobBuilder.Create(typeof(MYPROCESS))
.WithIdentity("TEST2"+i.toString(), "TEST2"+i.toString())
.UsingJobData("ClientId", 0)
.UsingJobData("UserId", 0)
.Build();
_schedulerQuartz.ScheduleJob(job, trigger);
}
_schedulerQuartz.Start();
您应该能够通过将线程池大小定义为 3 来创建此限制。服务请求的线程不会超过三个,因此只能同时 运行 三个作业.请注意,这可能会导致失火,失火政策需要到位。
NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] = "3";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
在 IScheduler 对象内的服务 windows 中,每次有很多作业要 运行 。但是当您开始工作时 CPU 获得 100% 的使用率。我想限制并发作业 运行 避免过度使用资源。 objective 一次可以 运行 大约 3 个进程。或多或少类似于 multithread 中的标准 semaforo。我正在放一个代码示例来演示我是如何进行计划的:
_schedulerQuartz = StdSchedulerFactory.GetDefaultScheduler();
for(int i = 0; i <=10;i++){
TriggerBuilder triggerBuilder = TriggerBuilder.Create()
.WithIdentity("TEST"+i.toString(), "TEST"+i.toString())
.StartNow();
triggerBuilder.WithSchedule(SimpleScheduleBuilder.RepeatSecondlyForever(60));
ITrigger trigger = triggerBuilder.Build();
IJobDetail job = JobBuilder.Create(typeof(MYPROCESS))
.WithIdentity("TEST2"+i.toString(), "TEST2"+i.toString())
.UsingJobData("ClientId", 0)
.UsingJobData("UserId", 0)
.Build();
_schedulerQuartz.ScheduleJob(job, trigger);
}
_schedulerQuartz.Start();
您应该能够通过将线程池大小定义为 3 来创建此限制。服务请求的线程不会超过三个,因此只能同时 运行 三个作业.请注意,这可能会导致失火,失火政策需要到位。
NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] = "3";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();