2010-05-05 13 views
5

क्वार्ट्स में, क्या मैं एकाधिक नौकरियों को निर्धारित करने के लिए एक एकल ट्रिगर का उपयोग कर सकता हूं, ताकि सभी नौकरियां समानांतर में निष्पादित हो जाएं। इसे करने का बेहतरीन तरीका क्या है।क्वार्ट्ज: एकाधिक नौकरियों को ट्रिगर करना

उदाहरण, प्रत्येक घंटे समानांतर में जॉब्स जे 1, जे 2, ..., जेएन निष्पादित करता है। यह मानते हुए कि नौकरियों के बीच कोई निर्भरता नहीं है।

उत्तर

1

आप एक ट्रिगर नौकरी बना सकते हैं जो अन्य नौकरियों को ट्रिगर करता है। जॉब मैप गुणों का उपयोग करके इसे कॉन्फ़िगर करने योग्य बनाएं, और आप कक्षा के मनमानी सेट को ट्रिगर करने के लिए कक्षा का पुन: उपयोग कर सकते हैं (और शायद अपने लिए पहले निष्पादित कर सकते हैं)।

+0

आदर्श रूप में आप ऐसी बातें नहीं करना चाहिए के रूप में यह समय निर्धारण नौकरियों की सही तरीके से –

8

आप एक ही ट्रिगर के साथ कई नौकरियों को संबद्ध नहीं कर सकते हैं (किसी दिए गए नौकरी में एकाधिक ट्रिगर्स हो सकते हैं, लेकिन इसके विपरीत नहीं), लेकिन आप प्रत्येक नौकरी के लिए एक से अधिक समान ट्रिगर्स सेट कर सकते हैं।

समानांतर में चलने के लिए, आपको यह सुनिश्चित करने की आवश्यकता है कि क्वार्ट्ज के थ्रेड पूल में ऐसा करने की पर्याप्त क्षमता है। थ्रेड पूल के कॉन्फ़िगरेशन विकल्पों के लिए here देखें।

+1

लिंक मर चुका है नहीं है बनाने समाप्त हो गया। अगर आप कर सकते हैं तो कृपया सही करें –

0

मैं एक मदद समारोह GetTrigger

class Program 
{ 
    static void Main(string[] args) 
    { 
     Common.Logging.LogManager.Adapter = new Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter { Level = Common.Logging.LogLevel.Info };    

     IJobDetail jobOne = JobBuilder.Create<JobOne>() 
      .WithIdentity(typeof(JobOne).Name) 
      .Build(); 

     IJobDetail jobTwo = JobBuilder.Create<JobTwo>() 
      .WithIdentity(typeof(JobTwo).Name) 
      .Build(); 

     var jobOneTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobOne); 
     var jobTwoTrigger = GetTrigger(new TimeSpan(0, 0, 5), jobTwo); 

     IScheduler scheduler = StdSchedulerFactory.GetDefaultScheduler(); 
     scheduler.ScheduleJob(jobOne, jobOneTrigger); 
     scheduler.ScheduleJob(jobTwo, jobTwoTrigger); 

     scheduler.Start(); 
    } 

    private static ITrigger GetTrigger(TimeSpan executionTimeSpan, IJobDetail forJob) 
    {    
     return TriggerBuilder.Create() 
      .WithIdentity(forJob.JobType.Name+"Trigger") 
      .StartNow() 
      .WithSimpleSchedule(x => x 
       .WithInterval(executionTimeSpan) 
       .RepeatForever()) 
      .ForJob(forJob.JobType.Name) 
      .Build(); 
    } 
} 

public class JobOne : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("JobOne"); 
    } 
} 

public class JobTwo : IJob 
{ 
    public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine("JobTwo"); 
    } 
} 
संबंधित मुद्दे