日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

C# 封裝 BackgroundService 執(zhí)行后臺(tái)任務(wù)

admin
2025年4月3日 0:18 本文熱度 269

在.NET Core和.NET 5+中,BackgroundService 是一個(gè)非常有用的抽象基類,用于在 ASP.NET Core 應(yīng)用程序中執(zhí)行后臺(tái)任務(wù)。它簡(jiǎn)化了后臺(tái)任務(wù)的管理,使得開發(fā)者可以更方便地創(chuàng)建和運(yùn)行長(zhǎng)時(shí)間的運(yùn)行的后臺(tái)服務(wù)。本文將詳細(xì)介紹如何封裝 BackgroundService,并在實(shí)際項(xiàng)目中應(yīng)用它。

一、BackgroundService 簡(jiǎn)介 

BackgroundService 是一個(gè)抽象基類,提供了后臺(tái)任務(wù)的基類實(shí)現(xiàn)。它繼承自 IHostedService 接口,并處理了任務(wù)的啟動(dòng)和停止邏輯。通過繼承 BackgroundService,開發(fā)者可以專注于實(shí)現(xiàn)具體的后臺(tái)任務(wù)邏輯,而不需要關(guān)心服務(wù)的啟動(dòng)和停止管理。

二、封裝 BackgroundService 的步驟 

1. 創(chuàng)建 BackgroundService 子類

首先,我們需要?jiǎng)?chuàng)建一個(gè)繼承自 BackgroundService 的子類,并實(shí)現(xiàn) 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)
        {
            // 執(zhí)行后臺(tái)任務(wù)邏輯
            await Task.Delay(1000, stoppingToken); // 模擬任務(wù)執(zhí)行時(shí)間
            Console.WriteLine("Background task is running...");
        }
    }

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

在上面的示例中,ExecuteAsync 方法包含后臺(tái)任務(wù)的主要邏輯,Dispose 方法用于釋放資源。

2. 注冊(cè) BackgroundService

接下來,我們需要在 Startup.cs 文件中注冊(cè) BackgroundService,以便 ASP.NET Core 主機(jī)能夠識(shí)別并啟動(dòng)它。

示例代碼如下:

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

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

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

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

app.UseRouting();

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

app.Run();

在上面的代碼中,通過調(diào)用 AddHostedService<MyBackgroundService>() 方法,我們將 MyBackgroundService 注冊(cè)為托管服務(wù)。

三、高級(jí)封裝 

在實(shí)際項(xiàng)目中,我們可能需要封裝更多的功能,例如任務(wù)調(diào)度、日志記錄、錯(cuò)誤處理等。以下是一個(gè)更高級(jí)的封裝示例:

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)
            {
                // 執(zhí)行后臺(tái)任務(wù)邏輯
                await Task.Delay(1000, stoppingToken); // 模擬任務(wù)執(zhí)行時(shí)間
                _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();
    }
}

在這個(gè)示例中,我們通過依賴注入(DI)引入了日志記錄功能,并在 ExecuteAsync 方法中添加了錯(cuò)誤處理邏輯。

3. 注冊(cè) AdvancedBackgroundService

在 Startup.cs 文件中注冊(cè) AdvancedBackgroundService

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

var builder = WebApplication.CreateBuilder(args);

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

var app = builder.Build();

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

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

app.UseRouting();

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

app.Run();

四、總結(jié) 

通過封裝 BackgroundService,我們可以輕松地在 ASP.NET Core 應(yīng)用程序中實(shí)現(xiàn)和管理后臺(tái)任務(wù)。BackgroundService 提供了簡(jiǎn)潔的接口和良好的擴(kuò)展性,使得開發(fā)者可以專注于實(shí)現(xiàn)具體的業(yè)務(wù)邏輯,而不需要關(guān)心后臺(tái)服務(wù)的啟動(dòng)和停止管理。通過高級(jí)封裝,我們還可以添加日志記錄、錯(cuò)誤處理等功能,進(jìn)一步提高后臺(tái)服務(wù)的可靠性和可維護(hù)性。

在實(shí)際項(xiàng)目中,合理地封裝和使用 BackgroundService,可以顯著提升應(yīng)用程序的功能和用戶體驗(yàn)。希望本文能為您在 ASP.NET Core 開發(fā)中封裝和使用 BackgroundService 提供有益的參考和幫助。


閱讀原文:原文鏈接


該文章在 2025/4/3 18:33:06 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 亚洲中文字幕a | 国产熟女乱伦一区二区 | 免费高清影视资源 | 欧亚乱色熟一区二区三四区 | 一级直接观看 | 青青草原国产在 | 色一情一乱一伦一区二区三区 | 国产一区二区三区不卡在线看 | 成在线人免费视频 | 91精品成人免费国产 | 因为太怕痛就全点防御力了 | 欧美视频在线观看免费最新 | 日本国产一区二区三区在线观看 | 91精品国产福利尤物免费 | 国产交换精品一区二区 | 日韩一区二区三区四区不卡 | 黄瓜视频在线播放看片 | 国产精品自在线拍国产手机版 | 欧美日韩一| 日本在线免费 | 性满足bbwbbwbbw| 国产放荡对白 | 精品成人一区二区三区电影 | 国产初高中生真实在线视频 | 女人精aaa | 国产日产高清dvd碟片 | 亚洲精品第一国产综合精品5 | 日韩在线看片 | 国产亚洲一区区二 | 2025中文字幕无 | 337p日本大胆欧美人术 | 在线免费观看国产 | 精品国产二区亚洲日本精品 | 国产亚洲欧洲aⅴ综合一区 ady中文字幕 | 亚洲欧美精品变态另类 | 免费无人区一码二码乱码区别在哪 | 午夜视频在线免费 | 自拍亚洲一区欧美另类尤物 | 成年人在线观看视频网站 | 日韩欧美另类一区二区三区 | 综合亚洲精品 |