如何在 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对象。
广告