首页
视频
资源
登录
雨雨雨雨辰
有个性,不需要签名
博主信息
排名
6
文章
6
粉丝
16
评论
8
文章类别
.NET
20篇
Python
6篇
CSS
0篇
sql
4篇
JS
4篇
other
1篇
notepad
0篇
Redis
1篇
Linux
0篇
Regex
1篇
test
0篇
.NET Core
2篇
其他
1篇
最新文章
最新评价
{{item.articleTitle}}
{{item.blogName}}
:
{{item.content}}
关于我们
ICP备案 :
渝ICP备18016597号-1
网站信息:
2018-2024
TNBLOG.NET
技术交流:
群号656732739
联系我们:
contact@tnblog.net
欢迎加群
欢迎加群交流技术
原
任务组件HangFire
4608
人阅读
2021/4/9 18:10
总访问:
223771
评论:
0
收藏:
0
手机
分类:
.NET
# 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)
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
👈{{preArticle.title}}
👉{{nextArticle.title}}
评价
{{titleitem}}
{{titleitem}}
{{item.content}}
{{titleitem}}
{{titleitem}}
{{item.content}}