如何在 ASP.NET Core 中安排后台任务(作业)?
后台任务,也称为作业,本质上是不打算在应用程序的正常流程中执行的服务,例如发送电子邮件确认或定期清理数据库以清除不活动的帐户。这些工作不是为了与客户交互或处理用户输入。相反,它们在后台运行,处理队列中的项目或执行长时间运行的进程。
在后台作业或服务中执行这些任务的主要优势是,您可以保持应用程序响应。例如,当用户注册时,您可以安排将电子邮件发送给用户的后台作业,而不是在同一请求中向他们发送电子邮件。
ASP.NETCore通过提供在应用程序启动时在后台运行任务的抽象来支持后台任务。在ASP.NETCore中,这些类型的后台任务称为托管服务,因为您在应用程序中托管它们。
您可以使用IHostedService接口在后台运行任务。托管服务仅指示包含后台任务逻辑的类。当应用程序启动时,您注册多个在应用程序运行时在后台运行的后台任务。当应用程序停止时,服务也会停止。甚至ASP.NET核心服务器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(); }) .ConfigureServices(services =>{ services.AddHostedService (); }); }
您可以使用BackgroundService类作为基类来实现IHostedService接口。它包含一个ExecuteAsync(CancellationToken)用于运行后台服务的调用。该方法返回一个代表后台服务生命周期的Task对象。