2016-12-05 6 views
0

Weiß jemand, ist es möglich, einen Job in Quartz.net mit variablen Intervall zu planen? Zum Beispiel habe ich ein Intervall von 10 bis 20 und ich muss einen Job planen, der alle n Sekunden ausgeführt werden würde, wobei n eine Zufallszahl zwischen 10 und 20 ist, die nach jeder Jobausführung aktualisiert wird.Variable Intervall in Quartz.net

Danke.

+0

Wo macht das Sinn? – Rabban

+0

https://stackoverflow.com/questions/25930384/how-doo-i-force-a-quartz-net-job-to-restart-intervall-after-completion –

+1

Kannst du nicht einfach den ursprünglichen Auslöser mit dem entfernen UnschedulerJob-Methode ?: http://quartznet.sourceforge.net/apidoc/1.0/html/html/ff17ee5c-4ba8-34e5-6dfc-600a13a6de2e.htm ... und dann einen neuen Trigger mit dem neuen Intervall mit dem ScheduleJob hinzufügen Methode: http://quarznet.sourceforge.net/apidoc/1.0/html/html/84be9956-052d-05d7-4366-0837fcd6d78b.htm Es gibt auch eine RescheduleJob-Methode, die beides tut: http: //quartznet.sourceforge .net/apidoc/1.0/html/html/44656a29-199e-7373-5547-e20318780802.htm – mm8

Antwort

0

Bauen Sie Ihren Auslöser für erstes Feuer auf diese Weise:

var triggerKey = new TriggerKey("simpleTrigger", "simpleTriggerGroup"); 
ITrigger trigger = TriggerBuilder.Create() 
        .WithIdentity(triggerKey) 
        .StartNow() 
        .Build(); 

Dann in der Execute-Methode Ihrer Jobklasse die Trigger ändern:

public void Execute(IJobExecutionContext context) 
    { 
     Console.WriteLine(string.Format("{0} hello this is a test", DateTime.Now.ToString("r"))); 

     var newInterval = new Random().Next(20, 30); 

     // retrieve the trigger 
     var oldTrigger = context.Scheduler.GetTrigger(new TriggerKey("simpleTrigger", "simpleTriggerGroup")); 

     // obtain a builder that would produce the trigger 
     var tb = oldTrigger.GetTriggerBuilder(); 

     // update the schedule associated with the builder, and build the new trigger 
     var newTrigger = tb.StartAt(DateTime.Now.AddSeconds(newInterval)).Build(); 

     context.Scheduler.RescheduleJob(oldTrigger.Key, newTrigger); 
     Console.WriteLine("Trigger fired... changed interval to {0}", newInterval); 
    } 

Der Auftrag wird in unterschiedlichen Intervallen ausgeführt werden .

+0

danke! Ich habe es mit Job-Listener gemacht, aber Ihr Weg funktioniert auch! –