BackgroundService 是 ASP.NET Core 中实现长运行托管后台任务的标准方式,需继承并重写 ExecuteAsync,使用 CancellationToken 响应关闭,通过 AddHostedService 注册,支持 DI 但需注意作用域生命周期。

在 C#(特别是 .NET 5+ 的 ASP.NET Core 应用中),BackgroundService 是实现**长运行、托管后台任务**的标准方式。它由 IServiceCollection 托管,随应用启动/停止自动生命周期管理,比裸写线程或 Task.Run 更安全、更可控。
1. 继承 BackgroundService 并重写 ExecuteAsync
核心是继承 BackgroundService,并重写 ExecuteAsync(CancellationToken stoppingToken) 方法。该方法会被框架调用一次,你需在此内部实现持续运行的逻辑(通常用循环 + 延迟)。
- 必须使用
stoppingToken检查取消请求,确保能响应应用关闭 - 避免直接用
while(true)死循环,要用await Task.Delay(..., stoppingToken)支持中断 - 异常未捕获会导致后台服务意外终止(不会自动重启)
示例:每 5 秒打印一次时间
public class ClockService : BackgroundService
{
private readonly ILogger<ClockService> _logger;
public ClockService(ILogger<ClockService> logger) => _logger = logger;
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
_logger.LogInformation("当前时间: {Time}", DateTime.Now);
await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken);
}
}
}登录后复制
2. 在 Program.cs 中注册为托管服务
.NET 6+ 推荐在 Program.cs 的服务容器中注册,使用 AddHostedService<t>()</t> 或 AddScoped<t>().AddHostedService(x => x.GetRequiredService<t>())</t></t>(推荐前者)。
- 注册后,框架会在应用启动时调用
StartAsync,关闭时调用StopAsync - 服务默认是单例生命周期,无需手动管理实例
注册代码(Program.cs):
标签: app ai c# 作用域 自动重启 .net red
还木有评论哦,快来抢沙发吧~