博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Core中的通用主机(二)——托管服务
阅读量:5298 次
发布时间:2019-06-14

本文共 1428 字,大约阅读时间需要 4 分钟。

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

hostBuilder.ConfigureServices((hostContextservices) =>

{
    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 envIHostApplicationLifetime appLifetime)

{
}

 

IHostingEnvironment

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

 

IApplicationLifetime

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

事件订阅:

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

操作:

  • :关闭整个主机

 

BackgroundService

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

class MyHostedService : BackgroundService

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

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

转载于:https://www.cnblogs.com/TianFang/p/10597721.html

你可能感兴趣的文章
poj-1410 Intersection
查看>>
Ubuntu 16.04 安装Mysql后,初始账号密码位置。
查看>>
艰难中前行
查看>>
[pytorch学习]1.pytorch ubuntu安装
查看>>
阿里云CentOS 安装配置ASPNET Core
查看>>
repeater 分页显示数据
查看>>
HDU-3666 THE MATRIX PROBLEM
查看>>
鼠标悬停放大图片 - 漂亮
查看>>
【转载】博士后了
查看>>
IDEA操作git的一些常用技巧
查看>>
Java多线程基础(一)
查看>>
TCP粘包拆包问题
查看>>
JAVA学习之开发环境配置
查看>>
Java中Runnable和Thread的区别
查看>>
C#通过webbrowser控件与javascript交互
查看>>
mongodb 的安装(Centor OS )
查看>>
设计模式之迭代器模式
查看>>
Android高效加载大图、多图解决方案,有效避免程序OOM
查看>>
git操作
查看>>
css常识
查看>>