创建 Hangfire 定时任务项目
创建 ASP.NET Core Web 应用程序
使用 NuGet 安装 Hangfire 依赖程序包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <Project Sdk= "Microsoft.NET.Sdk.Web" > <PropertyGroup> <TargetFramework>net6.0</TargetFramework> <Nullable>enable</Nullable> <ImplicitUsings>enable</ImplicitUsings> </PropertyGroup> <ItemGroup> <PackageReference Include= "Hangfire.AspNetCore" Version= "1.8.5" /> <PackageReference Include= "Hangfire.Core" Version= "1.8.5" /> <PackageReference Include= "Hangfire.SqlServer" Version= "1.8.5" /> <PackageReference Include= "Microsoft.Data.SqlClient" Version= "5.1.1" /> </ItemGroup> </Project> |
创建数据库
1 2 | CREATE DATABASE [HangfireTest] GO |
打开 appsettings.json 配置数据库连接字符串
1 2 3 | "ConnectionStrings" : { "HangfireConnection" : "Server=DESKTOP-DABHN6U\\MSSQLSERVER2014;uid=sa;pwd=123456;database=HangfireTest;MultipleActiveResultSets=true;TrustServerCertificate=true;" }, |
注册服务,打开 Program.cs 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); builder.Services.AddHangfire(configuration => configuration .SetDataCompatibilityLevel(CompatibilityLevel.Version_180) .UseSimpleAssemblyNameTypeSerializer() .UseRecommendedSerializerSettings() .UseSqlServerStorage(builder.Configuration.GetConnectionString( "HangfireConnection" ))); builder.Services.AddHangfireServer(); var app = builder.Build(); |
同时添加仪表板 UI
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | app.UseHangfireDashboard(); BackgroundJob.Enqueue(() => Console.WriteLine( "Hello world from Hangfire!" )); RecurringJob.AddOrUpdate( "myrecurringjob" , () => Console.WriteLine( "重复执行!" ), Cron.Minutely); app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapHangfireDashboard(); |
运行应用程序
运行后数据库表自动创建
查看后台作业
https://localhost:7282/hangfire
引用:https://docs.hangfire.io/en/latest/getting-started/aspnet-core-applications.html
1 2 3 4 5 6 7 8 9 10 11 | //支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。 var jobId = BackgroundJob.Enqueue(()=>WriteLog( "队列任务执行了!" )); //延迟任务执行:不是马上调用方法,而是设定一个未来时间点再来执行,延迟作业仅执行一次 var jobId = BackgroundJob.Schedule(()=>WriteLog( "一天后的延迟任务执行了!" ),TimeSpan .FromDays(1)); //一天后执行该任务 //循环任务执行:一行代码添加重复执行的任务,其内置了常见的时间循环模式,也可基于CRON表达式来设定复杂的模式。【用的比较的多】 RecurringJob.AddOrUpdate(()=>WriteLog( "每分钟执行任务!" ), Cron.Minutely); //注意最小单位是分钟 //延续性任务执行:类似于.NET中的Task,可以在第一个任务执行完之后紧接着再次执行另外的任务 BackgroundJob.ContinueWith(jobId,()=>WriteLog( "连续任务!" )); |
其它定时任务:Quartz.NET
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-10-05 用CAP操作RabbitMQ 处理分布式事务的解决方案
2022-10-05 Docker 安装部署RabbitMQ 的management版本
2022-10-05 .Net Core 资源
2022-10-05 CAP 介绍
2022-10-05 Pomelo.EntityFrameworkCore.MySql