日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hangfire oracle,.net core 之Hangfire任务调度

發布時間:2024/1/8 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hangfire oracle,.net core 之Hangfire任务调度 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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任务调度的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。