任务组件HangFire 电脑版发表于:2021/4/9 18:10 # HangFire > 文档地址:https://docs.hangfire.io/en/latest/getting-started/index.html HangFire类似Quartz.NET的任务组件,核心组件**服务端**、**客户端**、**持久化存储**,可与大多数.NET平台一起使用,客户端负责创建后台作业并将其保存到存储中。后台作业是应该在当前执行上下文之外执行的工作单元,例如在后台线程,其他进程中,甚至在不同的服务器上执行-借助Hangfire,即使没有其他配置,也可以实现所有工作。 - 支持最小的周期单位为分钟 - 持久化保存任务,还可在仪表盘中手动执行任务 - 重试机制(注意:由于是持久化存储的,所有当你程序停止后没有删除任务,程序重新启动后 仍会尝试继续前面的任务) - 分布式部署 - 可扩展性 组件: - **HangFire** 是程序包名称和主程序包,其中包括所有需要的依赖项.在这种情况下,此主程序包针对.NET框架. - **HangFire.Core** 是包含核心组件的程序包,该程序包的所有变体都可能依赖于这些组件. - **HangFire.AspNetCore** 是支持.NET Core的扩展 (Hangfire是持久化任务,所以还需要一个持久化扩展存储,sqlserver、mysql、redis等,会自动在库中创建表) .NET Core中使用: **IIS8.0以下[配置预加载](https://docs.hangfire.io/en/latest/deployment-to-production/making-aspnet-app-always-running.html)比较麻烦 会由于回收机制导致任务停止运行 建议别用asp.net的形式 尽可能的使用服务** ```c# //Startup.cs //引入HangFire.AspNetCore、HangFire.PostgreSql public void ConfigureServices(IServiceCollection services) { services.AddRazorPages(); services.AddHangfire(o => o.UsePostgreSqlStorage("DATABASE=Hangfire;HOST=localhost;PASSWORD=123456;USER ID=postgres;PORT=5432;Pooling=true")); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseHangfireServer(); app.UseHangfireDashboard(); // 访问"/hangfire" 使用仪表盘 可视化执行任务 //即时执行,创建时执行仅一次 BackgroundJob.Enqueue<SayHello>(job => job.Hello()); //延迟执行,根据参数 BackgroundJob.Schedule<SayHello>(jobs => jobs.DelayHello(), DateTimeOffset.UtcNow.AddMinutes(1)); //周期性执行任务 RecurringJob.AddOrUpdate<SayHello>("周期任务1",jobs=> jobs.loopHello(), Cron.Minutely()); /* * 周期性任务也可以使用CRON表达式来配置 * Cron表达式:是由七子表达式组成,描述个别细节的时间表:秒 分钟 小时 日 月 星期 年(年可省略) * RecurringJob.AddOrUpdate(() => Console.Write("Hello!"), "0 */1 * * * ?"); //每分钟执行一次 * */ } ``` ```c# public class SayHello { public void Hello() { Console.WriteLine(""); Console.WriteLine($"{DateTime.Now},Hello"); } public void DelayHello() { Console.WriteLine($"{DateTime.Now},Hello !!!"); } public async Task loopHello() { Console.WriteLine($"{DateTime.Now},Hello World!!!"); } } ``` 结果:[![](https://img.tnblog.net/arcimg/cz/1ed5c3db711f46f1aa3a6f45a826c549.png)](https://img.tnblog.net/arcimg/cz/1ed5c3db711f46f1aa3a6f45a826c549.png) 仪表盘:[![](https://img.tnblog.net/arcimg/cz/ef40b26c6c9141fbbded1594862a9de2.png)](https://img.tnblog.net/arcimg/cz/ef40b26c6c9141fbbded1594862a9de2.png)