.NET Core 實現後台任務(定時任務)Longbow.Tasks 組件(三)

原文鏈接://www.cnblogs.com/ysmc/p/16512309.html

  在上兩篇文章中,簡單介紹了怎麼使用 IHostedService 與 BackgroundService 實現定時任務,除此以外,我們還可以藉助一些第三方的組件實現定時任務,如大家比較熟悉的 Quartz,今天給大家介紹另外一個輕量級的定時任務組件 Longbow.Tasks,Longbow.Tasks 同樣是也是繼承了 IHostedService 噢,支援cron,該組件在 Gitee 上開源,感興趣的小夥伴可以去看看,傳送門

  值得一提的是,該組件同時支援 .NET Framework 與 .Net Core,下面看看官方說明:


Task 任務管理

任務服務管理是 BootstrapAdmin 內置的輕量級多執行緒安全的定時後台任務模組,功能均內置於 Longbow.Tasks.dll 組件庫內,支援 NETFramework 4.5+ 與 NETCore 2.0+

設置

NETCore 容器注入

public void ConfigureServices(IServiceCollection services)
{
    services.AddTaskServices();
}

NETFramework 4.5+

// 程式入口調用
TaskServicesManager.Init();

組成

ITaskServicesFactory

後台任務服務工廠介面,內部實現類為 TaskServicesFactory 也繼承了 IHostedService 所以組件通過 services.AddTaskServices(); 將任務服務注入到 NETCore 容器中

IScheduler

後台任務調度介面,內部實現類為 DefaultScheduler 負責管理任務的調度

ITrigger

後台任務觸發器介面,內部內置三個實現類分別為 (默認觸發器僅觸發一次)DefaultTrigger (周期性定時觸發器)RecurringTrigger (Cron表達式觸發器)CronTrigger 可以通過實現 ITrigger 介面根據實際業務需要自行擴展觸發器,組件默認提供 TriggerBuilder 負責創建任務觸發器

ITask

後台任務業務類介面,僅一個 Task Execute(CancellationToken cancellationToken); 方法,後台任務具體實現

TaskServicesOptions

後台任務服務配置類

TaskServicesManager:

後台任務服務人機交互操作類,提供所有後台任務操作相關 API


 

  首先我們需要安裝這個組件包,搜索 Longbow.Tasks 並安裝

   註冊該組件服務,然後就可以愉快的使用了;

builder.Services.AddTaskServices();

1、創建一個類,並且繼承 ITask,實現介面,寫上需要執行的任務程式碼:

public class TasksDemo : ITask
{
    public Task Execute(CancellationToken cancellationToken)
    {
        Console.WriteLine($"{DateTime.Now}");

        return Task.CompletedTask;
    }
}

2、在你需要啟動定時任務的地方,加上以下程式碼,按照自己的需要選擇中意的任務執行方式唄

 1 //立即執行,僅執行一次
 2 TaskServicesManager.GetOrAdd<TasksDemo>("任務唯一標識");
 3 
 4 //周期性任務 (1 分鐘後間隔 5 秒執行2次任務)
 5 var trigger = TriggerBuilder.Default.WithInterval(TimeSpan.FromSeconds(5)).WithRepeatCount(2).WithStartTime(DateTimeOffset.Now.AddMinutes(1)).Build();
 6 
 7 TaskServicesManager.GetOrAdd<TasksDemo>("任務唯一標識", trigger);
 8 
 9 //支援cron表達式,間隔 5 秒循環執行任務
10 TaskServicesManager.GetOrAdd<TasksDemo>("任務唯一標識", TriggerBuilder.Build("*/5 * * * * *"));

  值得一提的是,這裡的 Cron 表達式並不支援年,下面我們看看 Longbow.Tasks 的官方說明:


Cron 格式說明

cron 表達式是用於定義固定時間、日期和間隔的掩碼。掩碼由秒(可選)、分鐘、小時、日、月和星期欄位組成。所有欄位都允許指定多個值,如果所有欄位都包含匹配的值,則任何給定的日期/時間都將滿足指定的 cron 表達式。

                                    Allowed values    Allowed special characters   Comment

┌───────────── second (optional)       0-59              * , - /                      
│ ┌───────────── minute                0-59              * , - /                      
│ │ ┌───────────── hour                0-23              * , - /                      
│ │ │ ┌───────────── day of month      1-31              * , - / L W ?                
│ │ │ │ ┌───────────── month           1-12 or JAN-DEC   * , - /                      
│ │ │ │ │ ┌───────────── day of week   0-6  or SUN-SAT   * , - / # L ?                Both 0 and 7 means SUN
│ │ │ │ │ │
* * * * * *

  有小夥伴可能要問了,那我怎麼停止定時任務的執行呢,在我們啟動任務的時候,是需要輸入一個任務的唯一標識的,我們可以通過這個標識,找到我們任務的執行器,並對其進行啟動、暫停、停止等操作:

var task = TaskServicesManager.Get("任務唯一標識");

  獲取實例後,我們來看看都提供了一些什麼樣的操作吧

 1 public interface IScheduler
 2 {
 3     /// <summary>
 4     /// 獲得 任務調度名稱
 5     /// </summary>
 6     string Name { get; }
 7 
 8     /// <summary>
 9     /// 獲得/設置 調度器狀態
10     /// </summary>
11     SchedulerStatus Status { get; set; }
12 
13     /// <summary>
14     /// 獲得 下一次運行時間 為空時表示不再運行
15     /// </summary>
16     DateTimeOffset? NextRuntime { get; }
17 
18     /// <summary>
19     /// 獲得 上一次運行時間 為空時表示未運行
20     /// </summary>
21     DateTimeOffset? LastRuntime { get; }
22 
23     /// <summary>
24     /// 獲得 上一次任務運行結果
25     /// </summary>
26     TriggerResult LastRunResult { get; }
27 
28     /// <summary>
29     /// 獲得 上一次運行異常
30     /// </summary>
31     Exception? Exception { get; }
32 
33     /// <summary>
34     /// 獲得 調度器創建時間
35     /// </summary>
36     DateTimeOffset CreatedTime { get; }
37 
38     /// <summary>
39     /// 獲得 調度器相關觸發器
40     /// </summary>
41     IEnumerable<ITrigger> Triggers { get; }
42 
43     /// <summary>
44     /// 獲得 調度器相關聯任務
45     /// </summary>
46     ITask? Task { get; }
47 }

  好了,這次的介紹就到這,下一篇將會使用 Longbow.Tasks 進行實戰介紹【手動狗頭】

寫在最後

Bootstrap Blazor 官網地址://www.blazor.zone

  希望大佬們看到這篇文章,能給項目點個star支援下,感謝各位!

star流程:

1、訪問點擊項目鏈接:BootstrapBlazor   star

2、點擊star,如下圖,即可完成star,關注項目不迷路:

 

另外還有兩個GVP項目,大佬們方便的話也點下star唄,非常感謝:

  BootstrapAdmin 項目地址:star
  //gitee.com/LongbowEnterprise/BootstrapAdmin

  SliderCaptcha 項目地址:star
  //gitee.com/LongbowEnterprise/SliderCaptcha

 

交流群(QQ)歡迎加群討論

       BA & Blazor ①(795206915)          BA & Blazor ②(675147445)