.NET CORE Hangfire执行定时任务

1、hangfire如何实现

Hangfire是一个开源的.NET任务调度框架,提供了内置集成化的控制台,可以直观明了的查看作业调度情况,并且Hangfire不需要依赖于单独的应用程序执行(如:windows服务,window计划)。并且支持持久性存储。

Hangfire 的定时任务并不是使用 Timer 类来实现的。Hangfire 是一个用于在 .NET 应用程序中执行后台作业和定时任务的库,其核心原理是基于持久化存储(如 SQL Server、Redis 等)和轮询(Polling)实现的。

具体来说,Hangfire 会将需要执行的后台作业和定时任务存储到持久化存储中,然后使用轮询来检查这些任务是否需要执行。这种方式与传统的定时器实现方式有所不同,因为它能够确保在应用程序重启或崩溃后,Hangfire 仍然能够继续执行尚未完成的任务。

当然,Hangfire 库中也有与定时器相关的 API,比如 Cron 表达式等,可以用于配置定时任务的执行时间。但是,这些 API 只是为了方便用户配置定时任务的执行时间,实际上它们并不是 Hangfire 库的核心实现。

2、cron表达式格式的格式
一个cron表达式有6个有空格分隔的时间元素,按顺序依次为:
{秒数} {分钟} {小时} {日期} {月份} {星期} 
1.秒(0~59)
2.分钟(0~59)
3.小时(0~23)
4.天(月)(0~31,但是你需要考虑你月的天数)
5.月(0~11)
6.天(星期)(1~7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)

3、首先需要在startup.cs文件里注册

public void ConfigureServices(IServiceCollection services)
        {
            // hangfire start
                    services.AddHangfire(
                configuration => configuration
                .UseSqlServerStorage("Data Source=xxx.xx.xxx.xx;Initial Catalog=database;User ID=xxx;Password=xxxxxxx;Connect Timeout=30;Encrypt=true;TrustServerCertificate=true;ApplicationIntent=ReadWrite;MultiSubnetFailover=False")
                .SetDataCompatibilityLevel(CompatibilityLevel.Version_170)
                .UseSimpleAssemblyNameTypeSerializer()
                .UseRecommendedSerializerSettings()
            );

            services.AddHangfireServer();

        // end

        }

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                //开发环境
                app.UseHangfireDashboard("/hangfire");
            }

 else
            {

                //要发布的话需要在这个里面也加上

                app.UseHangfireDashboard("/hangfire", new DashboardOptions()
         
            }

}

之后可以在services里面调用方法来执行定时任务

// 每天早上8点,除去周六和周日
              RecurringJob.AddOrUpdate(
   () => 方法名(), "0 8 * *1, 2, 3, 4, 5", TimeZoneInfo.Local);

// 每天8点

RecurringJob.AddOrUpdate(
() => 方法名(""), Cron.Daily(8, 0), TimeZoneInfo.Local);

除了Daily的方法外,还有Hourly,monthly等,也可以自己使用Cron表达式。

可以在网站启动后加上/hangfire可以看到

什么时候执行,上次执行的时间

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于在.NET Core中实现定时任务,有几种不同的方法可供选择: 1. 使用System.Threading.Timer:可以使用`System.Threading.Timer`类创建一个定时器,指定要定期执行的方法以及执行间隔。例如: ```csharp using System; using System.Threading; public class Program { public static void Main() { Timer timer = new Timer(DoSomething, null, TimeSpan.Zero, TimeSpan.FromSeconds(10)); // 阻止主线程退出 Console.ReadKey(); } private static void DoSomething(object state) { // 执行定时任务的逻辑 Console.WriteLine("定时任务执行了!"); } } ``` 上述代码中,`DoSomething`方法将每隔10秒被执行一次。 2. 使用HangfireHangfire是一个.NET的开源库,提供了一个简单的方式来执行后台作业,包括定时任务。首先,你需要在项目中安装Hangfire。然后,在Startup类的ConfigureServices方法中配置Hangfire服务: ```csharp using Hangfire; using Hangfire.SqlServer; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; public class Startup { private readonly IConfiguration _configuration; public Startup(IConfiguration configuration) { _configuration = configuration; } public void ConfigureServices(IServiceCollection services) { // 添加Hangfire服务 services.AddHangfire(configuration => configuration.UseSqlServerStorage(_configuration.GetConnectionString("HangfireConnection"))); // ... } public void Configure(IApplicationBuilder app) { // ... // 启用Hangfire仪表板 app.UseHangfireDashboard(); // 启用Hangfire后台处理 app.UseHangfireServer(); // ... } } ``` 然后,在任何需要执行定时任务的地方,你可以使用Hangfire的`RecurringJob`类来定义定时任务: ```csharp using Hangfire; public class MyJob { [AutomaticRetry(Attempts = 3)] // 可选:定义任务失败重试的次数 public static void DoSomething() { // 执行定时任务的逻辑 Console.WriteLine("定时任务执行了!"); } } public class Program { public static void Main() { // 使用Hangfire调度定时任务 RecurringJob.AddOrUpdate<MyJob>("MyJob", x => x.DoSomething(), Cron.Minutely); // 阻止主线程退出 Console.ReadKey(); } } ``` 上述代码中,`DoSomething`方法将按照每分钟一次的频率被调度执行。 这些只是.NET Core中实现定时任务的一些常见方法,你可以根据自己的需求选择合适的方式来实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦深时有鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值