温馨提示×

c# backgroundservice怎样处理任务

c#
小樊
81
2024-11-18 12:28:07
栏目: 编程语言

在C#中,BackgroundService是用于在后台执行长时间运行任务的类,例如:定时清理缓存、发送电子邮件等。要使用BackgroundService处理任务,请按照以下步骤操作:

  1. 首先,创建一个继承自BackgroundService的类:
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;

public class MyBackgroundService : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            // 在这里执行您的任务
            await Task.Delay(1000); // 示例:等待1秒
        }
    }
}
  1. Startup.csProgram.cs中注册MyBackgroundService
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        // 注册 BackgroundService
        services.AddHostedService<MyBackgroundService>();
    }
}

或者

public class Program
{
    public static async Task Main(string[] args)
    {
        // 创建并启动 HostBuilder
        var host = new HostBuilder()
            .ConfigureServices((context, services) =>
            {
                // 注册 BackgroundService
                services.AddHostedService<MyBackgroundService>();
            })
            .Build();

        // 启动 Host
        await host.RunAsync();
    }
}
  1. 若要处理任务的中断,可以在ExecuteAsync方法中检查stoppingToken.IsCancellationRequested
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        // 在这里执行您的任务

        // 检查是否需要取消任务
        if (stoppingToken.IsCancellationRequested)
        {
            break;
        }

        await Task.Delay(1000); // 示例:等待1秒
    }
}
  1. 若要在应用程序关闭时优雅地停止BackgroundService,可以在Program.csMain方法中调用host.WaitForShutdownAsync()
public static async Task Main(string[] args)
{
    // 创建并启动 HostBuilder
    var host = new HostBuilder()
        .ConfigureServices((context, services) =>
        {
            // 注册 BackgroundService
            services.AddHostedService<MyBackgroundService>();
        })
        .Build();

    // 启动 Host
    await host.RunAsync();

    // 等待应用程序关闭
    await host.WaitForShutdownAsync();
}

现在,您的MyBackgroundService将在后台运行,并在需要时处理任务中断和应用程序关闭。

0