C#怎么配置后台任务 BackgroundService使用方法

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

C#怎么配置后台任务 BackgroundService使用方法-第1张图片-佛山资讯网

在 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

发布评论 0条评论)

还木有评论哦,快来抢沙发吧~