千家信息网

ASP.NET中怎么利用Hangfire执行后台任务

发表于:2024-11-17 作者:千家信息网编辑
千家信息网最后更新 2024年11月17日,ASP.NET中怎么利用Hangfire执行后台任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Hangfire是一个开源且商业免费使
千家信息网最后更新 2024年11月17日ASP.NET中怎么利用Hangfire执行后台任务

ASP.NET中怎么利用Hangfire执行后台任务,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Hangfire是一个开源且商业免费使用的工具函数库。可以让你非常容易地在ASP.NET应用(也可以不在ASP.NET应用)中执行多种类型的后台任务,而无需自行定制开发和管理基于Windows Service后台任务执行器。且任务信息可以被持久保存。内置提供集成化的控制台。

通过Nuget就可以在你的应用程序中安装Hangfire:Install-Package Hangfire

Hangfire的具有如下特性和有点:

  • 支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。使用方法:BackgroundJob.Enqueue(() => Console.WriteLine("Simple!"));

  • 延迟任务执行:不是马上调用方法,而是设定一个未来时间点再来执行。使用方法:BackgroundJob.Schedule(() => Console.WriteLine("Reliable!"), TimeSpan.FromDays(7));

  • 循环任务执行:只需要简单的一行代码就可以添加重复执行的任务,其内置了常见的时间循环模式,也可以基于CRON表达式来设定复杂的模式。使用方法:RecurringJob.AddOrUpdate(() => Console.WriteLine("Transparent!"), Cron.Daily);

  • 持久化保存任务、队列、统计信息:默认使用SQL Server,也可以配合消息队列来降低队列处理延迟,或配置使用Redis来获得更好的性能表现

  • 内置自动重试机制:可以设定重试次数,还可以手动在控制台重启任务

  • 除了调用静态方法外还支持实例方法

  • 能够捕获多语言状态:即可以把调用者的Thread.CurrentCulture和Thread.CurrentUICulture信息同任务持久保存在一起,以便任务执行的时候多语言信息是一致的

  • 支持任务取消:使用CancellationToken这样的机制来处理任务取消逻辑

  • 支持IoC容器:目前支持Ninject和Autofac比较常用的开源IoC容器

  • 支持Web集群:可以在一台或多台机器上运行多个Hangfire实例以便实现冗余备份

  • 支持多队列:同一个Hangfire实例可以支持多个队列,以便更好的控制任务的执行方式

  • 并发级别的控制:默认是处理器数量的5倍工作行程,当然也可以自己设定

  • 具备很好的扩展性:有很多扩展点来控制持久存储方式、IoC容器支持等

为什么要使用Hangfire这样的函数库呢?我觉得好处有如下几个方面:

  1. 开发简单:无需自己额外做开发,就可以实现任务的队列执行、延迟执行和重复执行

  2. 部署简单:可以同主ASP.NET应用部署在一起,测试和维护都相对简单

  3. 迁移简单:由于宿主不仅限于ASP.NET,那么未来可以非常容易的把任务执行器放到其他地方(需要改变的就是在其他宿主中启动Hangfire服务器)

  4. 扩展简单:由于开源且有很多扩展点,在现有插件都不满足自己需要的情况下能够容易的进行扩展

之前我把Hangfire运用到两种情况下:

  1. 后台长时间的科学计算:这样就可以让请求马上返回给客户端,后台完成长时间计算后,用SignalR实时提醒用户

  2. 后台群发邮件:通过延迟和循环任务分批通过SendCloud这样的服务发送群发邮件

当然,Hangfire的应用场景还很多,比如在后台处理电商卖家的订单。

Hangfire的文档编制真的很神奇。每一个开源项目的文件应该像它这样。ASP.NET的文档编制也应该像它这么好。

Hangfire中最佳的功能是它建立了/hangfire 仪表板,向你展示所有预设的,加工中的,成功的和失败的进程。这真是一个很好的附加功能。

你可以轻易地把"fire和forget"工作加入队列并且它们是支持持久队列的:

BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));

你可以使用延迟...

BackgroundJob.Schedule(() => Console.WriteLine("Delayed"), TimeSpan.FromDays(1));

或者使用大而复杂的CRON风格的循环性任务:

RecurringJob.AddOrUpdate(() => Console.Write("Recurring"), Cron.Daily);

看完上述内容,你们掌握ASP.NET中怎么利用Hangfire执行后台任务的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

任务 队列 支持 后台 方法 控制 处理 应用 延迟 信息 循环 使用方法 实例 容器 马上 开发 复杂 内容 函数 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 邮件服务器软件开发 软件开发财务怎么处理 病人和药物管理系统数据库设计 游戏软件开发上市公司 乡镇内部网络安全管理职责 河北水性软件开发试验设备 宁波营销网络技术推荐咨询 青浦区游戏软件开发项目 发服务器可以下王牌战争 网络安全攻防竞赛题库 数据库权限是谁授予给的 打印出数据库数据 多个微信小程序共用一个云数据库 数据库技术与应用实训报告 盖世风互联网科技有限公司 amd 低功耗服务器处理器 delphi7数据库怎么创建 大众计算机网络技术 而且网络安全也非常重要 绍兴服务器机柜定做报价 成都苹果手机软件开发需要多少钱 软件开发程序员需要什么课程 华为云服务器ip在哪查找 学生管理系统数据库的编程 四川前端软件开发服务 ntp服务器的配置文件名称是 收银机怎样进入数据库 怎么样拼电脑数据库 基于大数据下的网络安全论文 以管理员登录服务器
0