Hangfire可用作任务调度,类似延迟任务、队列任务、批量任务和定时任务等。

一、nuget Hangfire包

找到Hangfire.AspNetCore和Hangfire.SqlServer包,可以在nuget面板中找到或直接像如下方式安装:

Install Package Hangfire.AspNetCore

Install Package Hangfire.SqlServer

二、在Startup.cs文件中加入以下代码:

写一个Hangfire的扩展类,如下所示:

public static classHangFireModule

{public static IApplicationBuilder UseHangfire(thisIApplicationBuilder app)

{

app.UseHangfireServer();

app.UseHangfireDashboard();returnapp;

}public static IServiceCollection AddHangfire(thisIServiceCollection services)

{

services.AddHangfire(x=> x.UseSqlServerStorage(ConfigurationSetting.Configuration["ConnectionString:MyDb_Hangfire"]));returnservices;

}

}

在Startup的ConfigureServices方法中,加入services.AddHangfire();

在Startup的Configure方法中,加入app.UseHangfire();

三、自动加入任务

1.在当前模块中,新创建一个名为IHangfireTask的接口,将其注册为瞬时生命周期服务。我们将要实现的是,从此以后,继承该接口的类型都会被自动加入到任务调度中。

///

///Hangfire任务接口,任何继承该接口的都会加入到Hangfire任务///

public interfaceIHangfireTask : ITransient {///

///运行hangfire任务///

voidRun();

}

ITransient接口的作用就是,将所有继承ITransient的接口和类型注册为瞬时生命周期的服务。

2.在HangFireModule中新增一个UseHangfireTask扩展方法,目的是在Startup的Configure方法中使用,在程序启动的时候就执行该方法。

//运行Hangfire任务

public static void UseHangfireTask(thisIApplicationBuilder app) {//找到继承了IHangfireTask接口的实例

IList list = ServiceLocator.Services.GetServices()?.ToList();if (list?.Count > 0) {foreach (var item inlist) {

item.Run();

}

}

}

加入到Startup的Configure方法中:

public voidConfigure(IApplicationBuilder app, IHostingEnvironment env,IServiceProvider serviceProvider)

{

ServiceLocator.SetServices(serviceProvider);if(env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}else{

app.UseExceptionHandler();

}

app.UseMvc();

app.UseSwagger();

app.UseSwaggerUi();

app.UseHangfire();

app.UseHangfireTask();

}

如此这样,我们就做到了在程序刚启动时,程序就会自动去找到继承自IHangfireTask接口的所有类型并运行它们的Run()方法。

我们可以在Run()方法中实现诸如Hangfire的BackgroundJob或RecurringJob等任务。

接下来我们就用代码来实现一下!

我们现在想实现一个定时任务,则看如下代码:

public classRecurringTask:IHangfireTask

{private log4net.ILog log => LogHelper.Log4NetInstance.LogFactory(typeof(RecurringTask));public voidRunTask()

{

log.Info("每分钟执行一次定时任务");

}public voidRun()

{

RecurringJob.AddOrUpdate(()=> RunTask(), "* * * * *");

}

}

这里有一个地方需要注意,在使用RecurringJob或BackgroundJob的时候,就例如()=> RunTask()这个,RunTask方法的访问修饰符必须是public。如果有必要,尽量在RunTask方法内被调用的其他方法的访问修饰符也定义为public。

在Hangfire中,Cron表达式包含五个字段:分钟、小时、日期、月份、周,因此定时任务最低也只能是一分钟,没有秒数可供选择。

接下来我们看看程序运行的结果:

四、Hangfire的基本任务

1. BackgroundJob.Enqueue

作用:将一个任务放入到某个持久化的队列中并挨个执行,以便程序可以继续执行其他代码。该任务只执行一次。

实现:BackgroundJob.Enqueue(() => RunTask());

2. BackgroundJob.Schedule

作用:将一个任务延迟到某个时间点后执行。

实现:BackgroundJob.Schedule(() => RunTask(), TimeSpan.FromSeconds(30));

即在30秒后才执行RunTask()方法。

3. RecurringJob.AddOrUpdate

作用:重复执行一个任务,一般用作定时任务处理。

实现:RecurringJob.AddOrUpdate(()=> RunTask(), "* * * * *");

即每分钟都执行一次RunTask()方法。

4. BackgroundJob.ContinueWith

作用:类似工作流的形式,将多个任务连接起来按照顺序执行。

实现:

string jobId = BackgroundJob.Schedule(() => Console.WriteLine("第一个任务"),TimeSpan.FromSeconds(10));

BackgroundJob.ContinueWith(jobId, () => RunTask());

注意:以上RunTask()方法的访问修饰符必须是public。

hangfire oracle,.net core 之Hangfire任务调度相关推荐

  1. .NET之Hangfire快速入门和使用 (定时任务调度的一种解决方案)

    注意: 1. 当Hangfire服务由Web程序来启用时,默认情况下,web应用程序中的Hangfire服务器实例在第一个用户访问您的站点之前不会启动.甚至,有一些事件会在一段时间后导致web应用程序 ...

  2. 使用ASP.NET Core和Hangfire实现HTTP异步化方案

    Hi,大家好,我是Payne,欢迎大家一如既往地关注我的博客.今天这篇博客里的故事背景,来自我工作中的一次业务对接,因为客户方提供的是长达上百行的XML,所以一度让更喜欢使用JSON的博主感到沮丧,我 ...

  3. ASP.NET Core 使用 Hangfire 定时任务

    定时任务组件,除了 Hangfire 外,还有一个 Quarz.NET,不过 Hangfire .NET Core 支持的会更好些. ASP.NET Core 使用 Hangfire 很简单,首先,N ...

  4. ABP module-zero +AdminLTE+Bootstrap Table+jQuery权限管理系统第十四节--后台工作者HangFire与ABP框架Abp.Hangfire及扩展...

    返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 HangFire与Quartz.NET相比主要是HangFire的内置提供集成化的控制台,方便后台查看及监控,对于 ...

  5. hangfire支持mysql_快速入门 - Hangfire.HttpJob 中文文档

    先介绍下 Hangfire.HttpJob 自身引用的组件 Hangfire.AspNetCore (因为Hangfire.HttpJob是作为Hangfire的插件,Hangfire.AspNetC ...

  6. Oracle .NET Core Beta驱动已出,自己动手写EF Core Oracle

    使用.net core也有一段时间了,一直都没有Oracle官方的正式版驱动程序,更别说EF版本了.之前基于Oracle官方的.net core预览版本写了个Dapper的数据库操作实现,但是总感觉不 ...

  7. c odp.net连oracle,.NET Core 使用ODP.NET Core连接操作Oracle数据库

    1、使用必要条件 1) 安装Microsoft Visual Studio 2017或更高版本. 2) 安装Oracle Database 12c或更高版本. 2、ODP.NET Core安装配置 在 ...

  8. 【.NET Core】 hangfire

    与quartz.net对比 Quartz.net在定时任务处理方面优势如下: 支持秒级单位的定时任务处理,但是Hangfire只能支持分钟及以上的定时任务处理 原因在于Hangfire用的是开源的NC ...

  9. ASP.NET Core使用Hangfire做定时任务

    1.新建 ASP.NET Core项目,使用管理NuGet程序包添加Hangfire,然后ASP.NET Core Startup 类中添加如下代码 using Microsoft.AspNetCor ...

最新文章

  1. 01_字符串处理-----05_相似性度量
  2. 添加商品php,php – 为首次购买者添加商品到购物车
  3. windows - mysql
  4. 使用CUBA进行开发–是Spring的重大转变吗?
  5. php注册页面模板,选项卡式WordPress登陆注册模板
  6. C# 设计模式,工厂方法
  7. 路由到另外一个页面_Nextjs使用解读一(项目搭建与路由系统)
  8. 【django】三、常用的模板标签和过滤器
  9. python实战1.1——根据1.0做词云图
  10. 【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存
  11. python报告水印怎么弄_超简单Python安全批量打水印教程!
  12. PIM DM技术原理与实验
  13. vs2017结合qt开发,vs报错找不到库(解决方案)
  14. PP苹果助手 v2.3.0 官方版
  15. 运放放大倍数计算公式_运放电路设计【1】
  16. 特征级融合_自动驾驶系统入门(七)- 多传感器信息融合(MSIF)
  17. 1.3 eclips下载与安装
  18. 启发式算法,元启发式算法,超启发式算法
  19. 架构师必须了解的 5 种最佳软件架构模式
  20. 针对Arduino IDE 2.0安装后找不到端口的问题(USB转串口驱动)(Win11)

热门文章

  1. 2022年湖南省自考考试学前教育幼儿文学练习题及答案
  2. fastadmin btn-ajax,FastAdmin 在线命令生成时出错的分析
  3. ubuntu 16 xenial EKL安装
  4. 基于ChatGPT制作的一款英语口语练习应用SpokenAi
  5. matlab小车运动轨迹增量式PID控制
  6. Qt sql中出现的错误 Error: unable to open database “D:\Qt“: unable to open database file
  7. 方法被重写时的调用问题
  8. 贷款那些事之还款方式等额本息(一)
  9. 【转载】Windows 7下使用bcdedit删除多余启动项的命令
  10. 邝子平:vc兼做pe?