结束后如何重新运行我的工作?
How to rerun my job after it's end?
我正在使用 Quartz.Net 库。我写了一些触发器:
var t =
TriggerBuilder.Create()
.WithIdentity("FirstTask", "TaskGroup")
.StartAt(DateBuilder.TodayAt(16, 17, 0))
.EndAt(DateBuilder.TodayAt(17, 17, 0))
.WithSimpleSchedule(x => x.RepeatForever()
.WithIntervalInSeconds(1))
.Build();
如果我排除 .WithIntervalInSeconds(1)
我有一个例外,即重试时间不能为零。那么,我怎样才能在完成后重新开始我的工作呢?我也没有找到 quartz.net 配置文件来为其设置最大线程数。
要将最大线程数设置为 50:
var properties = new NameValueCollection { { @"quartz.threadPool.threadCount", @"50" } };
var factory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();
并且不排除WithIntervalInSeconds
,Quartz必须知道,什么时候再运行
在我之前的工作中,我们将 Quartz threadpool
配置如下:
quartz.threadPool.threadCount = 3
在 Configuration 部分阅读更多相关信息。
@stuartd 回答您的问题 here。
接受他的回答,然后将触发器更改为使用 StartNow
方法:
var trigger = TriggerBuilder.Create()
.WithIdentity(triggerKey)
.startNow()
.build();
@SchlaWiener 还使用 TopShelf
.
提供了一个不错的解决方案
比最初看起来容易得多:
var job = JobBuilder.Create<HelloJob>().WithIdentity(new JobKey("Task_1", "TaskGroup")).Build();
var t = TriggerBuilder.Create()
.WithIdentity("Trigger_1", "TaskGroup")
.StartAt(DateBuilder.TodayAt(21, 15, 0))
.EndAt(DateBuilder.TodayAt(21, 18, 0))
.Build();
_scheduleService.Scheduler.ScheduleJob(job, t);
以及listiner中的实现方法:
public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
if (DateTime.UtcNow > context.Trigger.EndTimeUtc)
return;
context.Scheduler.RescheduleJob(context.Trigger.Key, context.Trigger);
}
我正在使用 Quartz.Net 库。我写了一些触发器:
var t =
TriggerBuilder.Create()
.WithIdentity("FirstTask", "TaskGroup")
.StartAt(DateBuilder.TodayAt(16, 17, 0))
.EndAt(DateBuilder.TodayAt(17, 17, 0))
.WithSimpleSchedule(x => x.RepeatForever()
.WithIntervalInSeconds(1))
.Build();
如果我排除 .WithIntervalInSeconds(1)
我有一个例外,即重试时间不能为零。那么,我怎样才能在完成后重新开始我的工作呢?我也没有找到 quartz.net 配置文件来为其设置最大线程数。
要将最大线程数设置为 50:
var properties = new NameValueCollection { { @"quartz.threadPool.threadCount", @"50" } };
var factory = new StdSchedulerFactory(properties);
var scheduler = schedulerFactory.GetScheduler();
并且不排除WithIntervalInSeconds
,Quartz必须知道,什么时候再运行
在我之前的工作中,我们将 Quartz threadpool
配置如下:
quartz.threadPool.threadCount = 3
在 Configuration 部分阅读更多相关信息。
@stuartd 回答您的问题 here。
接受他的回答,然后将触发器更改为使用 StartNow
方法:
var trigger = TriggerBuilder.Create()
.WithIdentity(triggerKey)
.startNow()
.build();
@SchlaWiener 还使用 TopShelf
.
比最初看起来容易得多:
var job = JobBuilder.Create<HelloJob>().WithIdentity(new JobKey("Task_1", "TaskGroup")).Build();
var t = TriggerBuilder.Create()
.WithIdentity("Trigger_1", "TaskGroup")
.StartAt(DateBuilder.TodayAt(21, 15, 0))
.EndAt(DateBuilder.TodayAt(21, 18, 0))
.Build();
_scheduleService.Scheduler.ScheduleJob(job, t);
以及listiner中的实现方法:
public void JobWasExecuted(IJobExecutionContext context, JobExecutionException jobException)
{
if (DateTime.UtcNow > context.Trigger.EndTimeUtc)
return;
context.Scheduler.RescheduleJob(context.Trigger.Key, context.Trigger);
}