Quartz.net 中的可变间隔
Variable interval in Quartz.net
有谁知道可以在 Quartz.net 中以可变间隔安排工作?
例如,我有一个间隔 10 到 20,我需要安排一个作业,每 n 秒执行一次,其中 n 是每次作业执行后刷新的 10 到 20 之间的随机数。
谢谢。
以这种方式构建第一次触发的触发器:
var triggerKey = new TriggerKey("simpleTrigger", "simpleTriggerGroup");
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(triggerKey)
.StartNow()
.Build();
然后,在你的作业的Execute方法中class修改触发器:
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);
}
作业将在不同的时间间隔执行。
有谁知道可以在 Quartz.net 中以可变间隔安排工作? 例如,我有一个间隔 10 到 20,我需要安排一个作业,每 n 秒执行一次,其中 n 是每次作业执行后刷新的 10 到 20 之间的随机数。
谢谢。
以这种方式构建第一次触发的触发器:
var triggerKey = new TriggerKey("simpleTrigger", "simpleTriggerGroup");
ITrigger trigger = TriggerBuilder.Create()
.WithIdentity(triggerKey)
.StartNow()
.Build();
然后,在你的作业的Execute方法中class修改触发器:
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);
}
作业将在不同的时间间隔执行。