.Net Core定时调度hangfire:任务执行
2021/7/12 23:09:45
本文主要是介绍.Net Core定时调度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 { 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); } }
专用后台进程监视所有具有取消令牌参数的方法的后台作业任务,并轮询存储以查看它们的当前状态。当检测到状态改变或请求关闭时,相应的取消令牌的任务被取消。
这篇关于.Net Core定时调度hangfire:任务执行的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2022-03-01沐雪多租宝商城源码从.NetCore3.1升级到.Net6的步骤
- 2024-12-06使用Microsoft.Extensions.AI在.NET中生成嵌入向量
- 2024-11-18微软研究:RAG系统的四个层次提升理解与回答能力
- 2024-11-15C#中怎么从PEM格式的证书中提取公钥?-icode9专业技术文章分享
- 2024-11-14云架构设计——如何用diagrams.net绘制专业的AWS架构图?
- 2024-05-08首个适配Visual Studio平台的国产智能编程助手CodeGeeX正式上线!C#程序员必备效率神器!
- 2024-03-30C#设计模式之十六迭代器模式(Iterator Pattern)【行为型】
- 2024-03-29c# datetime tryparse
- 2024-02-21list find index c#
- 2024-01-24convert toint32 c#