如何在 ASP.NET Core 中排程後臺任務(作業)?


後臺任務,也稱為作業,本質上是並非旨在在應用程式的正常流程中執行的服務,例如傳送電子郵件確認或定期清理資料庫以清除非活動帳戶。這些作業並非旨在與客戶互動或處理使用者輸入。相反,它們在後臺執行,處理佇列中的專案或執行長時間執行的程序。

在後臺作業或服務中執行這些任務的主要優勢在於,您可以保持應用程式的響應能力。例如,當用戶註冊時,您可以安排一個後臺作業向用戶傳送電子郵件,而不是在同一請求中傳送電子郵件。

ASP.NET Core 透過提供在應用程式啟動時在後臺執行任務的抽象來支援後臺任務。在 ASP.NET Core 中,這些型別的後臺任務稱為託管服務,因為您將它們託管在應用程式中。

您可以使用**IHostedService**介面在後臺執行任務。託管服務只是表示包含後臺任務邏輯的類。當應用程式啟動時,您會註冊多個在應用程式執行期間在後臺執行的後臺任務。當應用程式停止時,服務也會停止。即使是 ASP.NET Core 伺服器 Kestrel 也作為 IHostedService 執行。

IHostedService 介面包含兩種方法

  • **StartAsync(CancellationToken):** 提供啟動後臺任務的邏輯。

  • **StopAsync(CancellationToken):** 在應用程式停止之前呼叫。它提供結束後臺任務的邏輯。

示例

這是一個說明託管服務配置的示例。

public class Program{
   public static void Main(string[] args){
      CreateHostBuilder(args).Build().Run();
   }

   public static IHostBuilder CreateHostBuilder(string[] args) =>
   Host.CreateDefaultBuilder(args)
      .ConfigureWebHostDefaults(webBuilder =>{
         webBuilder.UseStartup<Startup>();
      })
      .ConfigureServices(services =>{
         services.AddHostedService<VideosWatcher>();
      });
}

您可以使用BackgroundService類作為基類來實現IHostedService介面。它包含一個ExecuteAsync(CancellationToken)方法,該方法用於執行後臺服務。該方法返回一個表示後臺服務生命週期的Task物件。

更新於:2021年6月22日

2K+ 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.