• .Net Core中的通用主机(二)——托管服务


    前文介绍了.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

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

    事件订阅:

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

    操作:

     

    BackgroundService

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

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

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

  • 相关阅读:
    mongodb集群搭建
    ansible 部署redis集群(三台主机6节点3主3备)
    nginx upstream bug
    回炉重造之 nginx
    docker 搭建jenkins环境
    搭建gitlab
    Dockerfile传入变量问题
    mysql8忘记root密码重置密码
    docker-compose容器化构建nginx服务
    docker-compose容器化构建minio服务
  • 原文地址:https://www.cnblogs.com/TianFang/p/10597721.html
Copyright © 2020-2023  润新知