璋锌 发表于 2025-5-30 13:13:12

.Net6使用Hangfire定时任务

本文实例环境及版本 .Net6、Hangfire1.8.18、MySql
Hangfire官网地址:https://www.hangfire.io/
Hangfire需使用数据库,请引用对应的
一、基本使用
1、Nuget引用Hangfire


 2、在Startup->ConfigureServices中添加
services.AddHangfire(config =>
{
    string conMysqlLocal = Configuration["AppSetting:conMysqlLocal"];
    config.UseStorage(new MySqlStorage(conMysqlLocal, new MySqlStorageOptions
    {
      TablesPrefix = "hangfire", //在数据库中生成表的前缀名
      JobExpirationCheckInterval = TimeSpan.FromHours(1) // Hangfire检查和删除过期任务的频率
    }));
    config.UseFilter(new AutomaticRetryAttribute {
      Attempts=3, //任务失败后最大重试次数
      DelaysInSeconds = new[] { 120, 120 }, // 重试间隔(可选)
    });
});
// 添加Hangfire服务器
services.AddHangfireServer();3、在Startup->Configure中添加
// 配置Hangfire仪表盘(可选)
app.UseHangfireDashboard("/hangfire", new DashboardOptions
{
   DashboardTitle = "任务调度中心",
   Authorization = new[] { new HangfireAuthorizationFilter() }
});

// 几种Hangfire任务方式循环任务、单次任务、顺序任务等
//1、循环任务如:每八小时执行一次
//RecurringJob.AddOrUpdate<HangfireTimerService>("每天任务1", x => x.DoTasks(), "0 */8 * * *", new RecurringJobOptions() { TimeZone=TimeZoneInfo.Local});

//2、定时的单次任务10秒中后执行一次
BackgroundJob.Schedule<HangfireTimerService>(x=>x.DoTasks(),TimeSpan.FromSeconds(10));
//也是定时单次任务这种类型的任务一般是在应用程序启动的时候执行一次结束后不再重复执行
//BackgroundJob.Enqueue<HangfireTimerService>(x => x.DoTasks());4、可以将子任务封装进HangfireTimerService类中
public class HangfireTimerService
{
      /// <summary>
      /// 日志
      /// </summary>
      ILogger<HangfireTimerService> _logger;public HangfireTimerService(ILogger<HangfireTimerService> logger)
      {
          _logger = logger;
      }

      /// <summary>
      /// 此处执行各种定时任务
      /// </summary>
      public void DoTasks()
      {
          _logger.LogWarning("DoTasks 系统任务开始执行!{Time}", DateTime.Now);
          //禁用删除某个任务 根据任务ID
          //RecurringJob.RemoveIfExists("daily-cleanup");

          _logger.LogWarning("DoTasks 系统任务结束了!{Time}", DateTime.Now);
      }
}

/// <summary>
/// 重写Hangfire面板控制权限
/// </summary>
public class HangfireAuthorizationFilter : IDashboardAuthorizationFilter
{
      //这里需要配置权限规则
      public bool Authorize(DashboardContext context)
      {
          return true;
      }

二、其他配置
Hangfire是自带后台的。程序运行后访问后台
访问地址:系统地址/hangfire
 
才疏学浅,相关文档等仅供自我总结,如有相关问题可留言交流谢谢!
 

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

汲佩杉 发表于 2025-12-9 13:31:54

懂技术并乐意极积无私分享的人越来越少。珍惜

颛孙中 发表于 2025-12-14 06:07:23

热心回复!

敕码 发表于 2025-12-29 03:48:01

谢谢分享,试用一下

腥狩频 发表于 2026-1-8 23:14:37

新版吗?好像是停更了吧。

尸酒岐 发表于 2026-1-14 01:10:22

感谢分享,学习下。

缀访 发表于 2026-1-18 17:32:24

热心回复!

梅克 发表于 2026-1-21 22:04:33

yyds。多谢分享

巩芷琪 发表于 2026-1-22 11:39:13

yyds。多谢分享

愤血冒 发表于 2026-1-25 23:10:31

不错,里面软件多更新就更好了

吉娅寿 发表于 2026-1-26 09:28:17

感谢分享,下载保存了,貌似很强大

山芷兰 发表于 2026-1-26 10:18:16

收藏一下   不知道什么时候能用到

豹筒生 发表于 2026-1-28 18:10:52

用心讨论,共获提升!

挺喽蹂 发表于 2026-2-3 08:36:34

谢谢分享,试用一下

醋辛 发表于 2026-2-3 09:10:45

yyds。多谢分享

酝垓 发表于 2026-2-6 11:29:23

不错,里面软件多更新就更好了

上官银柳 发表于 2026-2-6 11:29:31

新版吗?好像是停更了吧。

扔飒 发表于 2026-2-7 15:34:00

用心讨论,共获提升!

窟聿湎 发表于 2026-2-7 20:05:55

收藏一下   不知道什么时候能用到

均浇 发表于 2026-2-8 07:22:41

感谢分享,学习下。
页: [1] 2
查看完整版本: .Net6使用Hangfire定时任务