首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >设置并发作业的最大值Quartz.Net

设置并发作业的最大值Quartz.Net
EN

Stack Overflow用户
提问于 2016-05-20 20:15:02
回答 1查看 2K关注 0票数 1

在IScheduler对象内的服务窗口中,每次都要运行大量作业。但是当你开始工作的时候,CPU使用率达到了100 %。我希望限制并发作业的运行,以避免过度使用资源。目标是可以一次运行大约3个进程。多少有点像多线程中的标准semaforo。我放了一个代码的例子来演示我是如何做这个时间表的:

代码语言:javascript
复制
_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();
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-26 13:28:30

您应该能够通过将线程池大小定义为3来创建此限制。将不会有超过三个线程为请求提供服务,因此只能同时运行三个作业。请注意,这可能会导致失火,并且需要制定失火的策略。

代码语言:javascript
复制
NameValueCollection properties = new NameValueCollection();
properties["quartz.threadPool.threadCount"] = "3";

ISchedulerFactory sf = new StdSchedulerFactory(properties);
IScheduler sched = sf.GetScheduler();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37346503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档