实用技巧

关注公众号 jb51net

关闭
首页 > 网络编程 > ASP.NET > 实用技巧 > .net hangfire定时任务

使用 Hangfire 在 .NET 9 中实现可靠定时任务的最佳实践

作者:江沉晚呤时

本文介绍了如何在.NET 9中使用Hangfire构建和管理定时任务系统,涵盖了从开发到生产的最佳实践,包括配置、创建任务、监控与管理以及生产环境注意事项,感兴趣的朋友跟随小编一起看看吧

随着 .NET 9 发布,后台任务调度和定时任务管理变得更简单、更高效。本文将展示如何在 .NET 9 中使用 Hangfire 构建定时任务系统,并讲解从开发到生产的最佳实践。

一、Hangfire 简介

Hangfire 是一个成熟的 .NET 后台任务框架,支持:

Hangfire 的核心优势:

二、创建 .NET 9 项目并安装依赖

创建 .NET 9 Web API 项目:

dotnet new web -n HangfireNet9Demo
cd HangfireNet9Demo

安装 Hangfire 和内存存储(测试用):

dotnet add package Hangfire
dotnet add package Hangfire.MemoryStorage

如果是生产环境推荐使用 SQL Server:

dotnet add package Hangfire.SqlServer

三、配置 Hangfire

Program.cs 中进行配置。NET 9 支持 最小 API 风格:

using Hangfire;
using Hangfire.MemoryStorage;
using Hangfire.Common;
var builder = WebApplication.CreateBuilder(args);
// 配置 Hangfire 服务
builder.Services.AddHangfire(config =>
{
    // 测试环境使用内存存储
    config.UseMemoryStorage();
    // 生产环境推荐:
    // config.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireDb"));
});
builder.Services.AddHangfireServer();
var app = builder.Build();
// 启用 Hangfire Dashboard,默认路径 /hangfire
app.UseHangfireDashboard();
// 根路由测试
app.MapGet("/", () => "Hangfire with .NET 9 is running...");

四、创建定时任务

1. Fire-and-Forget(立即执行任务)

app.Lifetime.ApplicationStarted.Register(() =>
{
    BackgroundJob.Enqueue(() => Console.WriteLine("立即执行的任务"));
});

2. Delayed(延迟任务)

app.Lifetime.ApplicationStarted.Register(() =>
{
    BackgroundJob.Schedule(() => Console.WriteLine("延迟 1 分钟执行"), TimeSpan.FromMinutes(1));
});

3. Recurring(周期任务)

周期任务通常用于定时报告、邮件或数据清理:

app.Lifetime.ApplicationStarted.Register(() =>
{
    var recurringJobManager = app.Services.GetRequiredService<IRecurringJobManager>();
    recurringJobManager.AddOrUpdate(
        "say-hello-job", 
        Job.FromExpression(() => Console.WriteLine("Hello Hangfire .NET 9!")), 
        "*/1 * * * *", // 每分钟执行
        new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
    );
});

💡 注意:

五、任务监控与管理

Hangfire 自带 Dashboard,可以监控:

访问:

http://localhost:5000/hangfire

在生产环境中,可以设置 身份验证

app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
    Authorization = new[] { new MyAuthorizationFilter() }
});

六、生产环境注意事项

七、完整 Program.cs 示例 (.NET 9)

using Hangfire;
using Hangfire.MemoryStorage;
using Hangfire.Common;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddHangfire(config => config.UseMemoryStorage());
builder.Services.AddHangfireServer();
var app = builder.Build();
app.UseHangfireDashboard();
app.MapGet("/", () => "Hangfire with .NET 9 is running...");
// Fire-and-Forget
app.Lifetime.ApplicationStarted.Register(() =>
{
    BackgroundJob.Enqueue(() => Console.WriteLine("立即执行的任务"));
    BackgroundJob.Schedule(() => Console.WriteLine("延迟 1 分钟执行"), TimeSpan.FromMinutes(1));
    var recurringJobManager = app.Services.GetRequiredService<IRecurringJobManager>();
    recurringJobManager.AddOrUpdate(
        "say-hello-job",
        Job.FromExpression(() => Console.WriteLine("Hello Hangfire .NET 9!")),
        "*/1 * * * *",
        new RecurringJobOptions { TimeZone = TimeZoneInfo.Local }
    );
});
app.Run();

总结

到此这篇关于使用 Hangfire 在 .NET 9 中实现可靠定时任务的最佳实践的文章就介绍到这了,更多相关.net hangfire定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文