首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C#] 任务调度--Hangfire

[C#] 任务调度--Hangfire

作者头像
科控物联
发布于 2023-10-06 12:33:39
发布于 2023-10-06 12:33:39
2K00
代码可运行
举报
文章被收录于专栏:科控自动化科控自动化
运行总次数:0
代码可运行

开源地址

Github:https://github.com/HangfireIO/Hangfire(opens new window)

在 .NET 开发中,我们经常需要执行一些较为耗时的任务,例如发送邮件、生成报表等。这些任务可能需要花费较长的时间,并且可能会导致用户体验变差。为了避免这种情况,我们可以使用 Hangfire 这个库来进行后台任务调度,从而提高应用程序的性能和用户体验。

#什么是 Hangfire?

Hangfire 是一个 .NET 库,用于管理后台任务。它提供了一种简单的方法来执行长时间运行的任务,例如发送电子邮件,生成报表,处理消息队列等。与其他后台任务调度库不同的是,Hangfire 提供了一个可靠的机制,可以在任务失败时自动重试,以确保任务始终被执行。Hangfire 还提供了一个简单的 Web 界面,可以查看任务状态、执行历史和性能指标。

Hangfire 的主要优点包括:

  • 简单易用。Hangfire 提供了一个简单的 API,让您可以快速地定义和执行后台任务。
  • 可靠性高。Hangfire 提供了一种可靠的机制,可以在任务失败时自动重试,以确保任务始终被执行。
  • 灵活性高。Hangfire 可以与多种存储后端集成,包括 SQL ServerRedisMongoDB 等,可以满足不同应用程序的需求。

#安装和配置 Hangfire

要使用 Hangfire,您需要先安装 Hangfire NuGet 包。可以使用 NuGet 管理器或 Package Manager Console 安装该包。例如,在 Visual Studio 中,可以通过以下命令安装 Hangfire:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package Hangfire

安装完成后,您需要配置 Hangfire,以便它可以连接到您选择的存储后端。Hangfire 支持多种存储后端,包括 SQL Server,Redis,MongoDB 等。您可以根据自己的需求选择合适的存储后端。在本文中,我们将使用 SQL Server 作为存储后端。

要配置 Hangfire 连接到 SQL Server,您需要先安装 Hangfire.SqlServer NuGet 包。可以使用 NuGet 管理器或 Package Manager Console 安装该包。例如,在 Visual Studio 中,可以通过以下命令安装 Hangfire.SqlServer:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Install-Package Hangfire.SqlServer

安装完成后,您需要在应用程序的 Startup.cs 文件中配置 Hangfire。以下是一个示例配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void ConfigureServices(IServiceCollection services)
{
    // 添加 Hangfire 服务
    services.AddHangfire(config =>
    {
        // 配置 Hangfire 使用 SQL Server 作为存储后端
        config.UseSqlServerStorage(Configuration.GetConnectionString("Hangfire"));
    });
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 启用 Hangfire 仪表盘
    app.UseHangfireDashboard();

    // 启用 Hangfire 服务
    app.UseHangfireServer();
    ```
}

在这个示例中,我们首先在 ConfigureServices 方法中添加了 Hangfire 服务,并配置了 Hangfire 使用 SQL Server 作为存储后端。接下来,在 Configure 方法中,我们启用了 Hangfire 仪表盘和 Hangfire 服务。这样,我们就完成了 Hangfire 的基本配置。

#在应用程序中使用 Hangfire

现在,我们已经完成了 Hangfire 的配置,接下来我们将看看如何在应用程序中使用 Hangfire。

#定义后台任务

在使用 Hangfire 执行后台任务之前,我们需要定义任务。Hangfire 支持多种任务类型,包括方法调用、委托、Lambda 表达式、反射调用等。以下是一个示例任务定义:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class BackgroundJobService
{
    public void SendEmail(string emailAddress, string subject, string body)
    {
        // 发送电子邮件
    }
}

在这个示例中,我们定义了一个名为 SendEmail 的方法,该方法接受三个参数:emailAddress、subject 和 body。我们将在后面的示例中使用此方法。

#调度后台任务

一旦我们定义了任务,就可以使用 Hangfire 调度任务了。以下是一个示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BackgroundJob.Enqueue<BackgroundJobService>(x => x.SendEmail("test@example.com", "Subject", "Body"));

在这个示例中,我们使用 BackgroundJob.Enqueue 方法来调度 SendEmail 方法。此方法将在后台执行,并且可以在 Hangfire 仪表板中查看其状态和历史记录。

#延迟后台任务

除了立即执行后台任务外,Hangfire 还支持延迟执行任务。例如,您可以在指定的时间后执行任务,或者在指定的时间间隔后重复执行任务。以下是一个示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
BackgroundJob.Schedule<BackgroundJobService>(x => x.SendEmail("test@example.com", "Subject", "Body"), TimeSpan.FromSeconds(60));

在这个示例中,我们使用 BackgroundJob.Schedule 方法来延迟执行 SendEmail 方法。此方法将在 60 秒后执行。

#定时后台任务

除了延迟执行任务外,Hangfire 还支持定时执行任务。例如,您可以在每天的特定时间执行任务,或者在指定的时间间隔后重复执行任务。以下是一个示例代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RecurringJob.AddOrUpdate<BackgroundJobService>("SendEmail", x => x.SendEmail("test@example.com", "Subject", "Body"), Cron.Daily);

在这个示例中,我们使用 RecurringJob.AddOrUpdate 方法来定时执行 SendEmail 方法。此方法将在每天的特定时间执行。

#监控任务状态和历史记录

Hangfire 提供了一个 Web 仪表板,用于监控任务状态和历史记录。您可以在应用程序中启用仪表板,并访问 /hangfire 路径来查看仪表板。以下是一个示例配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseHangfireDashboard();
    app.UseHangfireServer();
}

在这个示例中,我们启用了 Hangfire 仪表板,并将其配置为应用程序的根路径。

在 Hangfire 仪表板中,您可以查看任务状态和历史记录。您还可以取消任务、删除任务和查看任务详情。

#总结

Hangfire 是一个可靠的后台任务调度库,用于执行长时间运行的任务,例如发送电子邮件、生成报表、处理消息队列等。与其他后台任务调度库不同的是,Hangfire 提供了一种可靠的机制,可以在任务失败时自动重试,以确保任务始终被执行。Hangfire 还提供了一个简单的 Web 界面,可以查看任务状态、执行历史和性能指标。

在本文中,我们介绍了如何安装和配置 Hangfire,并提供了一些示例代码来说明如何在应用程序中使用 Hangfire。我们还介绍了如何使用 Hangfire 仪表板来监控任务状态和历史记录。

如果您需要执行长时间运行的任务,例如发送电子邮件、生成报表、处理消息队列等,我建议您考虑使用 Hangfire。Hangfire 可以帮助您提高应用程序的性能和用户体验,并确保您的任务始终被执行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-04 09:28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Coravel : .NET 轻量级任务调度与后台任务处理
Coravel 是一个专为 .NET 应用设计的轻量级后台任务框架,无需复杂配置即可实现任务调度、队列处理、缓存管理、事件广播等功能。
郑子铭
2025/08/06
910
Coravel : .NET 轻量级任务调度与后台任务处理
.NET之Hangfire快速入门和使用
  定时任务调度问题,是一个老生常谈的问题。网上有许多定时任务调度的解决方案,对于我而言很早以前主要是使用Window计划和Window服务来做任务定时执行,然后就开始使用定时任务调度框架Quartz.Net。但是却一直没有上手过Hangfire这个自带后台任务调度面板,可以在后台手动执行任务的神奇的任务调度框架。前段时间终于开始对他下手了,通过在网上查阅了一些资料和查看了Hangfire在Github中的demo,终于在我自己的项目中用上了Hangfire。在该篇文章中主要简单介绍一下什么是Hangfire,Hangfire的基本特征与优点和分别使用MySQL,MS SQL Server作为存储使用。
追逐时光者
2019/09/30
2.3K0
.NET之Hangfire快速入门和使用
Hangfire .NET任务调度框架实例
Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台(后台任务调度面板),可以直观明了的查看作业调度情况。
GoodTime
2023/10/31
6760
NET任务调度框架Hangfire使用指南
Hangfire 是一个开源的 .NET 任务调度框架,它允许开发人员轻松地将长时间运行的任务、定时任务和其他后台处理从主线程中分离出来,以提高应用程序的响应速度和性能
Net分享
2024/12/10
6120
NET任务调度框架Hangfire使用指南
手机号定位最简单的几种方法
手机生成的定位数据可以显示设备在一段时间内的位置。通过手机号码追踪某人的位置历史记录,对于寻找丢失的手机或监视儿童非常有用。不过,只有使用正确的工具才有可能做到这一点。本文将探讨跟踪手机号码位置历史记录的方法,帮助您确定最佳匹配对象。
知识与交流
2024/06/17
5K0
手机号定位最简单的几种方法
NetCore 中 后台任务利器之Hangfire 的使用
Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core。它最大特点在于内置提供集成化的控制台,方便后台查看及监控:
明志德道
2023/10/21
3.7K0
NetCore 中 后台任务利器之Hangfire 的使用
dotnet 控制台 Hangfire 后台定时任务
本文告诉大家如何在 dotnet core 的控制台通过 Hangfire 开启后台定时任务
林德熙
2019/03/20
1.7K0
ABP入门系列(20)——使用后台作业和工作者
源码路径:Github-LearningMpaAbp 1.引言 说到后台作业,你可能条件反射的想到BackgroundWorker,但后台作业并非是后台任务,后台作业用一种队列且持久稳固的方式安排一些待执行后台任务。 为执行长时间运行的任务而用户无需等待,以提高用户体验。 为创建可重试且持久稳固的任务来保证一个代码将会被成功运行,以提高系统的稳定性。 那什么又是后台工作者呢? 后台工作者则是简单运行在应用程序后台的独立线程,它用于定期执行一些任务。 一个后台工作者可以定期清除临时表、重建索引。 一个后台
圣杰
2018/01/11
3.7K0
ABP入门系列(20)——使用后台作业和工作者
.NET Core/.NET5/.NET6 开源项目任务调度组件汇总
SQL Server 与 Redis 持久化支持。Hangfire使用持久性存储来存储作业、队列和统计信息,并让它们在应用程序重启后继续存在。存储子系统的抽象程度足以支持经典的SQL Server和快速的Redis。
郑子铭
2025/01/13
4940
.NET Core/.NET5/.NET6 开源项目任务调度组件汇总
ASP.NET Core开源任务调度框架Hangfire实战演练
第一步:配置连接字符串,目前就是持久化我们的作业Job任务,这里我们采用MS SQLSERVER,持久化方式有很多种数据库支持,具体大家看一下官网。
跟着阿笨一起玩NET
2021/02/02
2.7K0
基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
在之前的文章《推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler》和《简单、轻量、功能非常强大的C#/ASP.NET定时调度任务执行管理组件–FluentScheduler之实例篇》中,我们认识和了解了FluentScheduler这款轻量的定时任务调度执行组件。今天再给大家介绍一款关于定时任务调度执行的组件–Quartz.Net,Quartz.Net是Java版Quartz的.NET实现。 相对FluentScheduler实现定时调度任务的使用简
Rector
2018/02/01
4K0
基于ASP.NET MVC(C#)和Quartz.Net组件实现的定时执行任务调度
C#/.NET/.NET Core定时任务调度的方法或者组件有哪些--Timer,FluentScheduler还是...
原文由Rector首发于 码友网 之 《C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskScheduler,Gofer.NET,Coravel,Quartz.NET还是Hangfire》
Rector
2020/06/19
4.2K0
开源的.NET定时任务组件Hangfire解析
彭泽0902
2018/01/04
2.6K0
开源的.NET定时任务组件Hangfire解析
在 ASP.NET Core 中构建自定义后台任务队列,无需 hangfire
在 ASP.NET Core 中构建可扩展的 Web 应用程序时,通常需要执行耗时的任务,例如发送电子邮件、数据处理或调用外部 API,而不会阻止主要的请求-响应流。在后台运行这些操作可以显著提高应用程序性能。
郑子铭
2024/12/05
7610
在 ASP.NET Core 中构建自定义后台任务队列,无需 hangfire
SignalR+Hangfire 实现后台任务队列和实时通讯
Hangfire是一个.NET的开源后台任务框架提供统一的编程模型,以可靠的方式处理后台任务
郑子铭
2023/08/30
4420
SignalR+Hangfire 实现后台任务队列和实时通讯
如何在一天内建立物联网应用程序
物联网(IoT)的建立是为了解决现实世界中麻烦的问题,而将物联网技术整合到更广泛的信息生态系统中的过程几乎是同等麻烦的。这就是为什么物联网不是您可以在商店(或其他任何地方)购买,整齐打包并可以随时带走的东西。您需要使用大量的时间、耐心和TLC构建您的物联网解决方案,或者将您的设备连接到一个应用程序支持平台,这个平台以前解决过类似的问题——可能会将您的物联网应用程序从18个月缩短到一天内。本文向您展示实现物联网的两种方法。
用户9527
2018/04/16
2.5K0
如何在一天内建立物联网应用程序
.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激、尊重。请严格遵守每个项目的开源协议后再使用。尊重知识产权,共建和谐开源社区。
张传宁IT讲堂
2021/06/22
2.6K0
.NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件
python使用Flask,Redis和Celery的异步任务
随着Web应用程序的发展和使用的增加,用例也变得多样化。我们现在正在建设和使用网站来执行比以往任何时候都更复杂的任务。其中一些任务可以进行处理,并将反馈立即转发给用户,而其他任务则需要稍后进行进一步处理和结果转发。越来越多地采用Internet访问和支持Internet的设备导致最终用户流量增加。
拓端
2020/09/26
2.3K0
教程|Cloudera数据科学工作台CDSW之旅
Cloudera数据科学工作台CDSW是一个安全的企业数据科学平台,它使的数据科学家能够通过为其提供自己的分析管道来加快从勘探到生产的工作流程。CDSW使数据科学家能够利用现有的技能和工具(例如Python、R和Scala)在Hadoop集群中运行计算。
大数据杂货铺
2021/03/11
2.3K0
使用 Elastic 的 OpenAI 集成追踪使用情况和管理成本
在这个AI驱动的应用程序变得无处不在的时代,理解和管理语言模型的使用情况至关重要。OpenAI 一直处于开发高级语言模型的前沿,这些模型驱动着从聊天机器人到代码生成的众多应用程序。然而,随着应用程序的复杂性和规模的增长,观察确保最佳性能和成本效益的关键指标变得至关重要。特别是在性能和可靠性监控以及成本管理方面的需求,对于最大化语言模型的潜力至关重要。
点火三周
2025/03/17
1590
使用 Elastic 的 OpenAI 集成追踪使用情况和管理成本
推荐阅读
相关推荐
Coravel : .NET 轻量级任务调度与后台任务处理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档