前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册咱们的后台任务了。.net core提供了一个通用的后台服务接口IHostedService,称为托管服务。一个注册托管服务的示例以下:html
hostBuilder.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<LifetimeEventsHostedService>();
services.AddHostedService<TimedHostedService>();
}); api
而一个托管服务的简单实现以下: app
class MyHostedService :IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
} 框架
每一个 IHostedService 实现都按照 ConfigureServices 中服务注册的顺序执行。 主机启动时,每一个 IHostedService 上都会调用 StartAsync。主机正常关闭时,以反向注册顺序调用 StopAsync。相比传统的后台任务,这里就提供了一个好处:在服务终止的时候能够优雅的关闭(graceful close)。 ide
另外,因为使用了DI框架,能够在托管服务的构造函数中很方便的获取其它服务: 函数
public MyHostedService(IHostEnvironment env, IHostApplicationLifetime appLifetime)
{
} ui
IHostingEnvironment spa
IHostingEnvironment主要用来提供App的环境信息,具体就很少介绍了,谁用谁知道。另外 .net
IApplicationLifetime htm
IApplicationLifetime 是托管服务常常引入的一个服务,它容许获取应用的启动和关闭事件,而且能关闭整个主机,具体接口以下:
事件订阅:
操做:
BackgroundService
不少时候,咱们后台服务每每只是一个简单的任务,并不须要关闭,此时可使用一个更简单的模型:BackgroundService
class MyHostedService : BackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
//do something
return Task.CompletedTask;
}
}
它自己是IHostedService的一个实现,但进一步简化了程序功能,只提供一个ExecuteAsync接口,咱们只须要在该函数中实现后台任务便可。