定时任务组件,除了 Hangfire 外,还有一个 Quarz.NET,不过 Hangfire .NET Core 支持的会更好些。
ASP.NET Core 使用 Hangfire 很简单,首先,Nuget 安装程序包:
> install-package Hangfire -pre
然后ConfigureServices
添加配置代码:
public void ConfigureServices(IServiceCollection services){ services.AddHangfire(x => x.UseSqlServerStorage(""));}
上面配置的是 Hangfire 任务配置数据库信息,默认只支持 SQLServer,如果不想使用数据库的话,可以 Nuget 安装程序包:
> install-package Hangfire.MemoryStorage -pre
修改ConfigureServices
配置代码:
public void ConfigureServices(IServiceCollection services){ services.AddHangfire(x => x..UseStorage(new MemoryStorage()));}
Hangfire 扩展(比如 MySql):
然后Configure
添加配置代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){ app.UseHangfireServer(); app.UseHangfireDashboard(); RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Minutely());}
上面配置代码一分钟执行一次,Hangfire 支持 UI 界面展示,地址:
Hangfire 默认也支持执行异步方法,RecurringJob
方法签名:
public static void AddOrUpdate(Expression > methodCall, string cronExpression, TimeZoneInfo timeZone = null, string queue = "default");public static void AddOrUpdate(Expression > methodCall, string cronExpression, TimeZoneInfo timeZone = null, string queue = "default");public static void AddOrUpdate (Expression > methodCall, Func cronExpression, TimeZoneInfo timeZone = null, string queue = "default");public static void AddOrUpdate(Expression > methodCall, Func cronExpression, TimeZoneInfo timeZone = null, string queue = "default");
异步和同步使用没有任何区别,示例代码:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory){ app.UseHangfireServer(); app.UseHangfireDashboard(); RecurringJob.AddOrUpdate(() => TestAsync(), Cron.Minutely());}public static async Task TestAsync(){ // to do...}