首先是基础知识和开源的项目 直接看大佬的博客吧
https://www.cnblogs.com/ecin/p/hangfire-best-practice.html
Hanglefire自己的实践: (部分注释引自网络)
首先创建一个Startup 类
using Microsoft.Owin;
using Owin;
using Hangfire;
[assembly: OwinStartup(typeof(HangfieDemo.Startup))]
namespace HangfieDemo
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
GlobalConfiguration.Configuration
.UseSqlServerStorage("Data Source=localhost;Initial Catalog=xxx;User ID=sa;Password=123456;max pool size=1000");
//启用Hangfire的仪表盘(可以看到任务的状态,进度等信息)
app.UseHangfireDashboard();
//启用HangfireServer这个中间件(它会自动释放)
app.UseHangfireServer();
}
}
}
Controller中的代码:
public ActionResult InsertDatak1()
{
//支持基于队列的任务处理:任务执行不是同步的,而是放到一个持久化队列中,以便马上把请求控制权返回给调用者。
var jobId = BackgroundJob.Enqueue(() => writeIn());
return Content("队列任务");
}
public ActionResult InsertDatak2()
{
//延迟任务执行:不是马上调用方法,而是设定一个未来时间点再来执行。
BackgroundJob.Schedule(() => Delay(), TimeSpan.FromSeconds(10));
return Content("延时任务");
}
public ActionResult InsertDatak3()
{
//循环任务执行:一行代码添加重复执行的任务,其内置了常见的时间循环模式,也可基于CRON表达式来设定复杂的模式。
RecurringJob.AddOrUpdate(() => Recur(), Cron.Minutely); //注意最小单位是分钟
return Content("每分钟执行任务");
}
仪表盘中的内容的解释:
作业: 不知道是干嘛的 重试:不知道是干嘛的 周期性作业: 循环任务
Enqueued: 不知道
计划: 队列中要执行的函数 (不包括循环任务)
其它的不解释了