You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hangfire每日特定时间执行循环任务:代码放置位置咨询

合适的放置位置说明

完全不用抱歉,这类配置问题是刚接触Hangfire的开发者常遇到的,很正常!

你的RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");代码用来添加每日9点的循环任务,具体放哪里取决于你的项目类型:

1. ASP.NET Core 项目(最常见)

推荐放在程序启动时的配置代码里,确保Hangfire初始化完成后再注册任务,比如在Program.cs中:

var builder = WebApplication.CreateBuilder(args);

// 先配置Hangfire服务与存储
builder.Services.AddHangfire(config => 
    config.UseSqlServerStorage(builder.Configuration.GetConnectionString("HangfireConnection")));
builder.Services.AddHangfireServer();

var app = builder.Build();

// 挂载Hangfire仪表盘(可选)
app.UseHangfireDashboard();

// 在这里注册你的循环任务!
RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");

app.Run();

为什么选这里?程序启动时只会执行一次,既能保证任务被成功注册到Hangfire调度系统,也不会出现重复注册的冗余操作(当然AddOrUpdate本身也会处理重复情况,但启动时注册是最稳妥的方式)。

2. 控制台/桌面应用

如果是控制台项目,要在Hangfire服务器启动之后执行这段代码,示例如下:

static void Main(string[] args)
{
    // 初始化Hangfire存储
    GlobalConfiguration.Configuration.UseSqlServerStorage("YourHangfireConnectionString");
    
    // 启动Hangfire后台服务器
    using (var server = new BackgroundJobServer())
    {
        // 注册循环任务
        RecurringJob.AddOrUpdate(() => MyMethod(), "* 9 * * *");

        Console.WriteLine("Hangfire服务器运行中,按任意键退出...");
        Console.ReadKey();
    }
}

额外注意事项

  • 确保MyMethod是可访问的(比如public权限),如果方法需要依赖服务,建议通过Hangfire的JobActivator配置依赖注入,避免出现实例获取失败的问题。
  • 不要把这段代码放在会被多次执行的位置(比如控制器的Action里),否则每次请求都会触发注册操作,虽然不会重复创建任务,但会造成不必要的资源消耗。

内容的提问来源于stack exchange,提问作者s.k.paul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:08:52