国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

NetCore中怎么利用托管服務(wù)執行后臺任務(wù)

發(fā)布時(shí)間:2021-07-27 11:45 來(lái)源:億速云 閱讀:0 作者:Leah 欄目: 編程語(yǔ)言 歡迎投稿:712375056

NetCore中怎么利用托管服務(wù)執行后臺任務(wù),相信很多沒(méi)有經(jīng)驗的人對此束手無(wú)策,為此本文總結了問(wèn)題出現的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

初始化準備

首先我們創(chuàng )建一個(gè)控制臺項目,下載基礎包

nuget install Microsoft.Extensions.Hosting

初始化Program.cs文件

public static class Program
{
    static async void Main(string[] args)
    {
        var builder = new HostBuilder().ConfigureServices((context, service) =>
        {

        });

        await builder.RunConsoleAsync();
    }
}

使用詳解

一般后臺服務(wù)

開(kāi)始使用

注入后臺服務(wù)非常簡(jiǎn)單,調用service.AddHostedService方法將自定義的服務(wù)進(jìn)行注入。

service.AddHostedService<CustomerJob/Service>();

自定義的后臺服務(wù)類(lèi)需要滿(mǎn)足定義的接口,才可以被正常使用,下面我引用一個(gè)官方的案例進(jìn)行說(shuō)明

定時(shí)后臺任務(wù)使用 [System.Threading.Timer]類(lèi)。 計時(shí)器觸發(fā)任務(wù)的 DoWork 方法。 在 StopAsync 上禁用計時(shí)器,并在 Dispose 上處置服務(wù)容器時(shí)處置計時(shí)器:

繼承IHostedService接口,實(shí)現StartAsyncStopAsync方法即可將服務(wù)正常注入后臺任務(wù)中。

IDisposable的作用主要是在進(jìn)程關(guān)閉時(shí)釋放定時(shí)器資源

public class TimedHostedService : IHostedService, IDisposable
{
    private int executionCount = 0;
    private readonly ILogger<TimedHostedService> _logger;
    private Timer _timer;

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

    public Task StartAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Hosted Service running.");

        _timer = new Timer(DoWork, null, TimeSpan.Zero, 
            TimeSpan.FromSeconds(5));

        return Task.CompletedTask;
    }

    private void DoWork(object state)
    {
        var count = Interlocked.Increment(ref executionCount);

        _logger.LogInformation(
            "Timed Hosted Service is working. Count: {Count}", count);
    }

    public Task StopAsync(CancellationToken stoppingToken)
    {
        _logger.LogInformation("Timed Hosted Service is stopping.");

        _timer?.Change(Timeout.Infinite, 0);

        return Task.CompletedTask;
    }

    public void Dispose()
    {
        _timer?.Dispose();
    }
}

內容整合

將上文中的內容進(jìn)行一個(gè)整合,得到的效果是

public static class Program
{
    static async void Main(string[] args)
    {
        var builder = new HostBuilder().ConfigureServices((context, service) =>
        {
        	service.AddHostedService<TimedHostedService>();
        });

        await builder.RunConsoleAsync();
    }
}

Ctrl+F5即可查看執行效果

其他說(shuō)明

以上說(shuō)明的是后臺任務(wù)在Core控制臺中的應用,那么在A(yíng)spNetCore【W(wǎng)eb項目】中是怎么使用的呢。當然都是一樣的,只是注入的地方發(fā)生了小小的改變,在A(yíng)spNetCore中注入通常發(fā)生在StartUp.cs中的方法ConfigureServices。使用方法和控制臺一致。

public void ConfigureServices(IServiceCollection services)
{
	service.AddHostedService<TimedHostedService>();
}

帶作用域的服務(wù)

適用于Web項目中涉及數據等外連接操作的場(chǎng)景,例如

每一次web請求對應一個(gè)數據庫上下文[DbContext],這個(gè)時(shí)候就要用要帶作用域的服務(wù)。

帶作用域的服務(wù)使用也非常簡(jiǎn)單,可以參考官方文檔,這里我就不做其他介紹

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

精品精品国产高清a级毛片| 国产精华AV午夜在线观看| 无码少妇一区二区性色AV| 日韩妆和一区二区区别是什么| 人妻18毛片A级毛片免费看| 波多野结衣网站www|