2016-05-20 7 views
0

大量のジョブを毎回実行するISchedulerオブジェクト内のサービスウィンドウ。しかし、あなたはCPUの作業を開始するときに100%の使用を取得します。過剰なリソース使用を避けるために、並行ジョブの実行を制限したい。その目的は、一度に約3つのプロセスを実行することが可能です。多かれ少なかれ、マルチスレッドの標準的なsemaforoに似ています。私はスケジュールをやっている方法を紹介するコードの例を入れている:同時ジョブの最大数を設定するQuatz.Net

_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(); 

答えて

2

あなたは3つのスレッドより3.あり多くのではないだろうことを、スレッドプールのサイズを定義することでこの制限を作成することができるはずです要求を処理するために同時に3つのジョブしか実行できません。これはおそらく失火につながり、失火政策を実施する必要があることに注意してください。

NameValueCollection properties = new NameValueCollection(); 
properties["quartz.threadPool.threadCount"] = "3"; 

ISchedulerFactory sf = new StdSchedulerFactory(properties); 
IScheduler sched = sf.GetScheduler(); 
関連する問題