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
相关产品推荐
相关产品推荐

