前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[C#] 任务调度--Hangfire

[C#] 任务调度--Hangfire

作者头像
科控物联
发布2023-10-06 20:33:39
1.4K0
发布2023-10-06 20:33:39
举报
文章被收录于专栏:科控自动化

开源地址

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

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

#什么是 Hangfire?

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

Hangfire 的主要优点包括:

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

#安装和配置 Hangfire

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

代码语言:javascript
复制
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
复制
Install-Package Hangfire.SqlServer

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

代码语言:javascript
复制
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
复制
public class BackgroundJobService
{
    public void SendEmail(string emailAddress, string subject, string body)
    {
        // 发送电子邮件
    }
}

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

#调度后台任务

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

代码语言:javascript
复制
BackgroundJob.Enqueue<BackgroundJobService>(x => x.SendEmail("test@example.com", "Subject", "Body"));

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

#延迟后台任务

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

代码语言:javascript
复制
BackgroundJob.Schedule<BackgroundJobService>(x => x.SendEmail("test@example.com", "Subject", "Body"), TimeSpan.FromSeconds(60));

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

#定时后台任务

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

代码语言:javascript
复制
RecurringJob.AddOrUpdate<BackgroundJobService>("SendEmail", x => x.SendEmail("test@example.com", "Subject", "Body"), Cron.Daily);

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

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

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

代码语言:javascript
复制
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 删除。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开源地址
    • #什么是 Hangfire?
      • #安装和配置 Hangfire
        • #在应用程序中使用 Hangfire
          • #定义后台任务
          • #调度后台任务
          • #延迟后台任务
          • #定时后台任务
          • #监控任务状态和历史记录
        • #总结
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档