Hi all, 來到第27天,昨天已經理解了 Hangfire 的功能,今天就來把他架起來吧。
這類型的工作是立即執行一次的單次任務。通常用於非同步地執行不需要立即得到結果的操作。
用法: BackgroundJob.Enqueue
例子:
csharp複製程式碼
BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));
這個範例會立即執行 Console.WriteLine
方法一次。
這類型的工作會延遲執行,通常用於希望在一段時間後執行的任務。例如,30分鐘後發送一封電子郵件。
用法: BackgroundJob.Schedule
例子:
csharp複製程式碼
BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"), TimeSpan.FromMinutes(30));
這個範例會在30分鐘後執行 Console.WriteLine
方法一次。
這類型的工作會按照指定的計劃定期執行,通常用於需要週期性執行的任務,例如每天備份資料庫,或每週發送報告。
用法: RecurringJob.AddOrUpdate
例子:
csharp複製程式碼
RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Daily);
這個範例會每天執行一次 Console.WriteLine
方法。Cron.Daily
是一個 Cron 表達式,表示每天執行一次。
這類型的工作會在另一個工作完成後執行,通常用於需要在某個工作完成後執行的任務,形成工作流程或工作鏈。
用法: BackgroundJob.ContinueWith
例子:
csharp複製程式碼
var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Initial job!"));
BackgroundJob.ContinueWith(jobId, () => Console.WriteLine("Continuation job!"));
這個範例首先執行一個初始工作 (Initial job!
),在它完成後,緊接著執行一個延續工作 (Continuation job!
)。
批次工作允許將多個背景工作組織成批次來執行,這些工作可以是串行(順序執行)或並行(同時執行)。這個功能需要 Hangfire Pro。
用法: BatchJob.StartNew
例子:
csharp複製程式碼
var batchId = BatchJob.StartNew(x =>
{
x.Enqueue(() => Console.WriteLine("Batch job 1"));
x.Enqueue(() => Console.WriteLine("Batch job 2"));
});
這個範例會以批次的方式執行兩個工作 (Batch job 1
和 Batch job 2
)。
這是一個使用 Cron 表達式的特殊定期工作,可以精確地定義工作執行的時間。這類工作通常用於非常複雜或自定義的定期工作排程。
用法: RecurringJob.AddOrUpdate
例子:
csharp複製程式碼
RecurringJob.AddOrUpdate(() => Console.WriteLine("Cron job!"), "0 12 * * MON");
這個範例會在每個星期一的中午12點執行一次 Console.WriteLine
方法。
首先我們會需要兩個 nuget 套件
Hangfire
Hangfire.MemoryStorage
接著再來註冊 Hangfire 服務
app.UseHangfireDashboard("/hangfire/dashboard");
最後就可以試著運行專案並透過指定 port 前往 /hangfire/dashboard
這邊可以設定一個每分鐘執行一次的簡單 echo job
code 如下,寫完後再呼叫該 api 就可以到 dashboard 查看 job,沒有意外的話就會有個 job 在執行囉。
[Route("/api/[controller]")]
public class EchoController: Controller
{
[HttpGet]
public IActionResult Echo()
{
RecurringJob.AddOrUpdate("echo", () => Console.WriteLine("Echo"), Cron.Minutely);
return Ok("Echo job added");
}
}
今天成功把一個 Hangfire 專案架設起來並練習新增個 Recurring job。今天就先到這,明天來將他與專案串些起來。
結語: 至近期被龐大 domain 注入的我