iT邦幫忙

2024 iThome 鐵人賽

DAY 27
0

Hi all, 來到第27天,昨天已經理解了 Hangfire 的功能,今天就來把他架起來吧。

Job 種類 by ChatGPT

1. Fire-and-forget Job

這類型的工作是立即執行一次的單次任務。通常用於非同步地執行不需要立即得到結果的操作。

  • 用法: BackgroundJob.Enqueue

  • 例子:

    csharp複製程式碼
    BackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget!"));
    

這個範例會立即執行 Console.WriteLine 方法一次。

2. Delayed Job

這類型的工作會延遲執行,通常用於希望在一段時間後執行的任務。例如,30分鐘後發送一封電子郵件。

  • 用法: BackgroundJob.Schedule

  • 例子:

    csharp複製程式碼
    BackgroundJob.Schedule(() => Console.WriteLine("Delayed!"), TimeSpan.FromMinutes(30));
    
    

這個範例會在30分鐘後執行 Console.WriteLine 方法一次。

3. Recurring Job

這類型的工作會按照指定的計劃定期執行,通常用於需要週期性執行的任務,例如每天備份資料庫,或每週發送報告。

  • 用法: RecurringJob.AddOrUpdate

  • 例子:

    csharp複製程式碼
    RecurringJob.AddOrUpdate(() => Console.WriteLine("Recurring!"), Cron.Daily);
    
    

這個範例會每天執行一次 Console.WriteLine 方法。Cron.Daily 是一個 Cron 表達式,表示每天執行一次。

4. Continuations Job

這類型的工作會在另一個工作完成後執行,通常用於需要在某個工作完成後執行的任務,形成工作流程或工作鏈。

  • 用法: BackgroundJob.ContinueWith

  • 例子:

    csharp複製程式碼
    var jobId = BackgroundJob.Enqueue(() => Console.WriteLine("Initial job!"));
    BackgroundJob.ContinueWith(jobId, () => Console.WriteLine("Continuation job!"));
    
    

這個範例首先執行一個初始工作 (Initial job!),在它完成後,緊接著執行一個延續工作 (Continuation job!)。

5. Batch 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 1Batch job 2)。

6. Recurring Cron Job

這是一個使用 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

Background Jobs

這邊可以設定一個每分鐘執行一次的簡單 echo job

Controller

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");
    }
}

Conclusion

今天成功把一個 Hangfire 專案架設起來並練習新增個 Recurring job。今天就先到這,明天來將他與專案串些起來。

結語: 至近期被龐大 domain 注入的我


上一篇
Day26 Introduce HangFire
下一篇
Day 28 Set Job to Hangfire
系列文
Side-Project:: 為自己打造個可編輯的區塊鏈30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言