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>();