如何在 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+ 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告