LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

C# 封装 BackgroundService 在 ASP.NET Core 应用程序中执行后台任务

admin
2025年2月20日 19:58 本文热度 221

在.NET Core和.NET 5+中,BackgroundService 是一个非常有用的抽象基类,用于在 ASP.NET Core 应用程序中执行后台任务。它简化了后台任务的管理,使得开发者可以更方便地创建和运行长时间的运行的后台服务。本文将详细介绍如何封装 BackgroundService,并在实际项目中应用它。

一、BackgroundService 简介 

BackgroundService 是一个抽象基类,提供了后台任务的基类实现。它继承自 IHostedService 接口,并处理了任务的启动和停止逻辑。通过继承 BackgroundService,开发者可以专注于实现具体的后台任务逻辑,而不需要关心服务的启动和停止管理。

二、封装 BackgroundService 的步骤 

1. 创建 BackgroundService 子类

首先,我们需要创建一个继承自 BackgroundService 的子类,并实现 ExecuteAsync 和 Dispose 方法。

示例代码如下:

using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.Hosting;

publicclassMyBackgroundService : BackgroundService
{
    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        while (!stoppingToken.IsCancellationRequested)
        {
            // 执行后台任务逻辑
            await Task.Delay(1000, stoppingToken); // 模拟任务执行时间
            Console.WriteLine("Background task is running...");
        }
    }

    public override void Dispose()
    {
        // 释放资源
        Console.WriteLine("Background service is disposing...");
        base.Dispose();
    }
}

在上面的示例中,ExecuteAsync 方法包含后台任务的主要逻辑,Dispose 方法用于释放资源。

2. 注册 BackgroundService

接下来,我们需要在 Startup.cs 文件中注册 BackgroundService,以便 ASP.NET Core 主机能够识别并启动它。

示例代码如下:

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// 添加服务到容器
builder.Services.AddHostedService<MyBackgroundService>();

var app = builder.Build();

// 配置 HTTP 请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.MapGet("/", () => "Hello World!");

app.Run();

在上面的代码中,通过调用 AddHostedService<MyBackgroundService>() 方法,我们将 MyBackgroundService 注册为托管服务。

三、高级封装 

在实际项目中,我们可能需要封装更多的功能,例如任务调度、日志记录、错误处理等。以下是一个更高级的封装示例:

using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;

publicclassAdvancedBackgroundService : BackgroundService
{
    privatereadonly ILogger<AdvancedBackgroundService> _logger;

    public AdvancedBackgroundService(ILogger<AdvancedBackgroundService> logger)
    {
        _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Advanced background service started.");

        try
        {
            while (!stoppingToken.IsCancellationRequested)
            {
                // 执行后台任务逻辑
                await Task.Delay(1000, stoppingToken); // 模拟任务执行时间
                _logger.LogInformation("Advanced background task is running...");
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "An error occurred while running the background task.");
        }
        finally
        {
            _logger.LogInformation("Advanced background service stopped.");
        }
    }

    public override void Dispose()
    {
        _logger.LogInformation("Disposing advanced background service.");
        base.Dispose();
    }
}

在这个示例中,我们通过依赖注入(DI)引入了日志记录功能,并在 ExecuteAsync 方法中添加了错误处理逻辑。

3. 注册 AdvancedBackgroundService

在 Startup.cs 文件中注册 AdvancedBackgroundService

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// 添加服务到容器
builder.Services.AddHostedService<AdvancedBackgroundService>();

var app = builder.Build();

// 配置 HTTP 请求管道
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.MapGet("/", () => "Hello World!");

app.Run();

四、总结 

通过封装 BackgroundService,我们可以轻松地在 ASP.NET Core 应用程序中实现和管理后台任务。BackgroundService 提供了简洁的接口和良好的扩展性,使得开发者可以专注于实现具体的业务逻辑,而不需要关心后台服务的启动和停止管理。通过高级封装,我们还可以添加日志记录、错误处理等功能,进一步提高后台服务的可靠性和可维护性。

在实际项目中,合理地封装和使用 BackgroundService,可以显著提升应用程序的功能和用户体验。希望本文能为您在 ASP.NET Core 开发中封装和使用 BackgroundService 提供有益的参考和帮助。


阅读原文:原文链接


该文章在 2025/2/21 12:25:45 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved