官网:https://www.hangfire.io/
官网的简介是在.NET和.NET Core应用程序中执行后台处理的简单方法,不需要Windows服务或单独的进程。
Hangfire的免费主要功能分为以下四个模块:
“即发即忘”:作业仅执行一次,而且几乎是在创建后立即执行。

延迟作业:延迟的作业也只执行一次,但不是立即执行,而是在一定的时间间隔后执行。

循环作业:循环作业在指定的CRON计划上触发多次。

延续作业:当其父作业完成时,继续执行。

快速开始和配置
在需要使用的项目的Nuget管理器中安装有关于Hangfire的包,接下来在Program类中进行配置:
C#
//配置SQLServer DB或MSMQ或Redis
builder.Services.AddHangfire(x => x.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnectionString")));
//添加并启动Hangfire服务器
builder.Services.AddHangfireServer();
//启用仪表盘
app.UseHangfireDashboard();
//可直接在Program中调度或在.NET托管任务中调度
BackgroundJob.Enqueue(() => Console.WriteLine("Hello, world!"));
builder.Services.AddHostedService<HangFireExtension>();
开始使用
配置完成后,将你想要使用的配置类中使用上面的各种任务就可以啦,简单易懂!
调度后台任务:
C#
BackgroundJob.Enqueue<BackgroundJobService>(x => x.SendEmail("test@a.com", "Subject", "Body"));
延迟后台任务:
C#
BackgroundJob.Schedule<BackgroundJobService>(x => x.SendEmail("test@a.com", "Subject", "Body"), TimeSpan.FromDays(60));
定时后台任务:
C#
RecurringJob.AddOrUpdate("BackgroundJobService",
() => BackgroundJobService.ExecuteAsync(),
"*/21 * * * * *"); //21秒执行一次 Cron表达式
继承后台任务:
C#
// 创建任务 A
var parentJobId = BackgroundJob.Enqueue(() => TaskA());
// 在任务 A 完成后执行任务 B
BackgroundJob.ContinueWith(parentJobId, () => TaskB());
// 如果任务 A 成功完成,则执行任务 B
BackgroundJob.ContinueWith(parentJobId, () => TaskB(), JobContinuationOptions.OnSuccess);
// 如果任务 A 失败,则执行任务 C
BackgroundJob.ContinueWith(parentJobId, () => TaskC(), JobContinuationOptions.OnFailure);