.NetCore定时调度hangfire:任务执⾏
1、队列任务
队列任务只执⾏在没有异常的情况下仅处理⼀次,若发⽣异常,提供重试机制,异常及重试信息都会被记录到数据库中,通过Hangfire控制⾯板可以查看到这些信息。
可以通过 BackgroundJob.Enqueue() ⽅法来加载执⾏队列任务:
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
2、延迟任务
延迟任务和队列任务类似,就是在⼀定时间之后执⾏任务:
BackgroundJob.Schedule(() => Console.WriteLine("Hello, world"),TimeSpan.FromDays(1));
hangfire会在固定时间间隔中检查调度,将任务调度到队列中,这个时间间隔可以⾃⼰设置:
小学一年级上册语文期中试卷var options = new BackgroundJobServerOptions
{苹果12怎么截图?
SchedulePollingInterval = TimeSpan.FromMinutes(1)
};
app.UseHangfireServer(options);
其他的如超时等设置也可以⽤ BackgroundJobServerOptions 来设置。
3、循环任务
循环任务使⽤ RecurringJob.AddOrUpdate() ⽅法添加,如果存在即更新⽅法。通过 Cron 来设置定时执⾏时间。也可以指定时区:
RecurringJob.AddOrUpdate("powerfuljob", () => Console.Write("Powerful!"), "0 12 * */2", TimeZoneInfo.Local);
第⼀个参数为每个任务的唯⼀标识符区分⼤⼩写,可以⽤ RemoveIfExists ⽅法来删除重复操作,没有重复操作不会报错。
RecurringJob.RemoveIfExists("some-id");
党员转正思想汇报
通过 Trigger ⽅法可以⽴即执⾏循环任务,触发调⽤的信息不会被记录在循环任务本⾝中,它的下⼀次执⾏时间也不会从这次运⾏中重新计算。例如,如果您有⼀个在星期三运⾏的每周作业,并且您在星期五⼿动触发它,它将在下⼀个星期三运⾏。
RecurringJob.Trigger("some-id");
4、延续任务
延续任务就是在⼀个任务执⾏后,紧接着继续执⾏任务,通过 BackgroundJob.ContinueJobWith() ⽅法添加。
BackgroundJob.ContinueJobWith("powerfuljob", () => Console.WriteLine("Continuation!"));
第⼀个参数是⽗任务的唯⼀标识符,在此标识符的任务执⾏完成后,即执⾏我们后续的任务。
5、批处理
批处理要收费,就算啦,哈哈
6.传递参数与依赖
首富之子王思聪不管是队列任务、延迟任务都有重载⽅法使⽤泛化来调⽤类中的⽅法,如下:
BackgroundJob.Enqueue<EmailSender>(x => x.Send(13, "Hello!"));
参数传递⽤值类型,不能⽤out和ref。
7、取消令牌
在⽅法的执⾏中可以传⼊ CancellationToken ⼤⼤降低了应⽤程序关闭时间和出现 ThreadAbortException。如下
BackgroundJob.Enqueue<IService>(x => x.LongRunningMethod(CancellationToken.None));
我不让你走public async Task LongRunningMethod(CancellationToken token)
{
for (var i = 0; i < Int32.MaxValue; i++)
{
await Task.Delay(TimeSpan.FromSeconds(1), token);
爱情搞笑短信}
}
专⽤后台进程监视所有具有取消令牌参数的⽅法的后台作业任务,并轮询存储以查看它们的当前状态。当检测到状态改变或请求关闭时,相应的取消令牌的任务被取消。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论