IHostedService托管服务

IHostedService是ASP.Net Core中的一个接口,它用于创建托管服务,即长时间后台运行的服务。具体来说,IHostedService接口提供了应用程序启动和停止时的“钩子”,让我们能在应用程序启动时启动后台线程,在应用程序停止时执行资源清理逻辑。这种托管服务通常用于实现需要持续运行的后台任务,比如定时任务、消息队列监听等。它的用途很像Java中ServletAPI的ServletContextListener

创建托管服务

托管服务类需要实现IHostedService接口,下面是一个例子,代码中我们创建一个能够执行定时任务的托管服务。

namespace DemoWebAPI.Services;

public class MyBackgroundService : IHostedService, IDisposable
{
    private Timer? _timer;

    public Task StartAsync(CancellationToken cancellationToken)
    {
        _timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
        return Task.CompletedTask;
    }

    public Task StopAsync(CancellationToken cancellationToken)
    {
        _timer?.Change(Timeout.Infinite, 0);
        return Task.CompletedTask;
    }

    private void DoWork(object? state)
    {
        Console.WriteLine("定时任务执行");
    }

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

IHostedService接口需要实现StartAsync()StopAsync()两个异步函数,分别对应托管服务的启动和停止。具体代码非常简单,应用启动时,我们创建了Timer对象并使其定时运行,而应用结束时则销毁Timer,定时器会每秒执行一次DoWork方法,在控制台上打印一条信息。此外为了实现Timer的释放,我们还实现了IDisposable接口。

注册托管服务

Program.cs中,我们可以使用如下写法注册托管服务。

builder.Services.AddHostedService<MyBackgroundService>();
作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap