在IScheduler对象中的服务窗口中,每次都要运行大量作业。但是,当你开始CPU的工作时,获得100%的使用率。我想限制并发作业运行,以避免过多的资源使用。目标可以一次运行大约3个流程。或多或少像多线程中的标准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();
答案 0 :(得分:3)
您应该能够通过将线程池大小定义为3来创建此限制。为请求提供服务不超过三个线程,因此只能同时运行三个作业。请注意,这可能会导致失火和失火政策的实施。
NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] = "3";
ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();