Hangfire 筆記 3 - 自訂排程作業名稱
0 |
網站需要開放使用者指定時間預約執行作業的功能,並需要簡單的介面查詢執行狀況。前陣子剛研究過 ASP.NET Core 的 IHostedService,但它限定 ASP.NET Core,而且查詢管理介面都需要自己刻;Quartz.NET 也蠻多人推的,API 簡潔擴充性高,但缺少現成的查詢管理介面。評估之後,決定重拾 Hangfire 上場作戰。
目標是允許使用者預約時間執行自訂作業,設定排程 API 類似這樣:
using Hangfire;
using System;
using System.Threading;
namespace DemoWeb.Models
{
public class Worker
{
public static void QueueSchJob(DateTime schTime, string jobName, string args)
{
BackgroundJob.Schedule(() => ExecuteJob(jobName, args), schTime);
}
public static void ExecuteJob(string jobName, string args)
{
//... 這裡只是示範,什麼都不做,純裝忙 ....
Thread.Sleep(new Random().Next(2000) + 500);
// 搞定收工
return;
}
}
}
這樣會有個問題:
工作清單裡的項目全都一模一樣,要點開才知道誰是誰:
要自訂工作名稱不難,方法是在 ExecuteJob 加上 [DisplayName("... {0} {1} ....")] Attribute,其中的 {0} {1}... 會套用 string.Format() 嵌入 ExecuteJob 方法的各參數,所以我們可用以下程式輕鬆實現自訂工作名稱:
public class Worker
{
public static void QueueSchJob(DateTime schTime, string jobName, string args, string userId)
{
BackgroundJob.Schedule(() => ExecuteJob($"{userId} 建立於 {DateTime.Now:MM-dd HH:mm:ss}", jobName, args), schTime);
}
[DisplayName("排程作業: {0} - {1}")]
public static void ExecuteJob(string creattor, string jobName, string args)
{
//... 這裡只是示範,什麼都不做,純裝忙 ....
Thread.Sleep(new Random().Next(2000) + 500);
// 搞定收工
return;
}
}
修改後,從工作項目標題便可看出建立者、建立時間及工作名稱,總算清楚多了。
Tips of how to name the background jobs in Hangfire.
Comments
Be the first to post a comment