前文介绍了.Net core的通用主机的配置,在基础配置完成后,下一步就是注册我们的后台任务了。.net core提供了一个通用的后台服务接口IHostedService,称为托管服务。一个注册托管服务的示例如下:

hostBuilder.ConfigureServices((hostContext, services) =>
{
    services.AddHostedService<LifetimeEventsHostedService>();
    services.AddHostedService<TimedHostedService>();
});

而一个托管服务的简单实现如下:

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)。

另外,由于使用了DI框架,可以在托管服务的构造函数中很方便的获取其它服务:

public MyHostedService(IHostEnvironment env, IHostApplicationLifetime appLifetime)
{
}

IHostingEnvironment

IHostingEnvironment主要用来提供App的环境信息,具体就不多介绍了,谁用谁知道。另外

IApplicationLifetime

IApplicationLifetime 是托管服务经常引入的一个服务,它允许获取应用的启动和关闭事件,并且能关闭整个主机,具体接口如下:

事件订阅:

  • ApplicationStarted:主机已完全启动。
  • ApplicationStopped:主机正在完成正常关闭。 应处理所有请求。 关闭受到阻止,直到完成此事件。
  • ApplicationStopping:主机正在执行正常关闭。 仍在处理请求。 关闭受到阻止,直到完成此事件。

操作:

BackgroundService

很多时候,我们后台服务往往只是一个简单的任务,并不需要关闭,此时可以使用一个更简单的模型:BackgroundService

class MyHostedService : BackgroundService
{
    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        //do something 
        return Task.CompletedTask;
    }
}

它本身是IHostedService的一个实现,但进一步简化了程序功能,只提供一个ExecuteAsync接口,我们只需要在该函数中实现后台任务即可。

最新文章

  1. 学习 Mobile App 网站制作的11个优秀案例
  2. jemalloc源码结构分析(二):CPU字节对齐算法
  3. html或jsp实现打印三种方法
  4. hadoop深入研究:(十六)——Avro序列化与反序列化
  5. 简便数据库——ORMLite框架
  6. linux 分割文件
  7. jQuery easyui刷新当前tabs
  8. C语言之二维数组棋盘游戏
  9. 【前端】HTML中最适合做按钮的元素
  10. CSS3概述
  11. mysql修改用户密码命令
  12. Lucene用法示例
  13. 转://Oracle 高可用技术与云基础架构
  14. debian7(wheezy)升级安装mercurial hg最新版2.8-RC,解决tortoisehg2.9.2不能使用。
  15. Java基础-赋值运算符Assignment Operators与条件运算符Condition Operators
  16. Eclipse Indigo 3.7.0 安装GIT插件
  17. 一款纯css实现的垂直时间线效果
  18. Zookeeper命令操作
  19. Ubuntu终端常用的快捷键,光标移动到开始位置
  20. phpcms后台主菜单不显示

热门文章

  1. Python_datetime模块
  2. 利用MySQL统计一列中不同值的数量方法示例
  3. Codeforces 436E Cardboard Box (看题解)
  4. VS2017 cdkey
  5. 050 Kafka的引入介绍
  6. vue回调函数无法更改model的值
  7. NLR:利用非线性回归,梯度下降法求出学习参数θ,进而求得Cost函数最优值——Jason niu
  8. 2501 矩阵距离 (bfs)
  9. Cinema CodeForces - 670C (离散+排序)
  10. 使用SpringSecurity