.NET Core3.0创建Worker Services的实现

.NET CORE 3.0新增了Worker Services的新项目模板,可以编写长时间运行的后台服务,并且能轻松的部署成windows服务或linux守护程序。如果安装的vs2019是中文版本,Worker Services变成了辅助角色服务。Worker Services 咱也不知道怎么翻译成了这个名称,咱也不敢乱翻译,下文就保持原名称。。。,本文将会演示如何创建一个Worker Services项目,并且部署为windows服务或linux守护程序运行;

开始创建worker service 项目

创建新项目——》选择辅助角色服务

.NET Core3.0创建Worker Services的实现

.NET Core3.0创建Worker Services的实现

项目创建成功之后,您会看到创建了两个类:Program和Worker。

Program.cs

public static void Main(string[] args)
    {
      CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
          .ConfigureServices((hostContext, services) =>
        {
          services.AddHostedService<Worker>();
        });

Program类跟ASP.NET Core Web应用程序非常类似,不同之处没有了startup类,并且把worker服务添加到DI container中。

Worker.cs

public class Worker : BackgroundService
  {
    private readonly ILogger<Worker> _logger;

    public Worker(ILogger<Worker> logger)
    {
      _logger = logger;
    }

    protected override async Task ExecuteAsync(CancellationToken stoppingToken)
    {
      while (!stoppingToken.IsCancellationRequested)
      {
        _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
        await Task.Delay(1000, stoppingToken);
      }
    }
  }

worker只是一个简单的类,它继承自BackgroundService,而后者又实现IHostedService接口。

默认的worker演示,没隔1秒,循环打印运行的时间。

.NET Core3.0创建Worker Services的实现

部署为Windows服务运行1.在项目中添加nuget包:Microsoft.Extensions.Hosting.WindowsServices

.NET Core3.0创建Worker Services的实现

2.然后在program.cs内部,将UseWindowsService()添加到CreateHostBuilder

public static IHostBuilder CreateHostBuilder(string[] args) =>
      Host.CreateDefaultBuilder(args)
       .UseWindowsService()
        .ConfigureServices((hostContext, services) =>
        {
          services.AddHostedService<Worker>();
        });

3.执行一下命令发布项目

dotnet publish -c Release -o C:\WorkerPub

.NET Core3.0创建Worker Services的实现

4.然后使用sc.exe工具来管理服务,输入一下命令创建为windows服务

sc.exe create DemoWorkService binPath=C:\WorkerPub\WorkerService1.exe

.NET Core3.0创建Worker Services的实现

查看服务状态使用一下命令

sc.exe query DemoWorkService 

.NET Core3.0创建Worker Services的实现

启动命令

sc.exe start DemoWorkService 

.NET Core3.0创建Worker Services的实现

在服务列表查看,DemoWorkService已安装成功

.NET Core3.0创建Worker Services的实现

停用 、删除命令

sc.exe stop DemoWorkService 
sc.exe delete DemoWorkService 

部署作为Linux守护程序运行

部署linux守护程序也是很方便的执行一下两个步骤即可:

添加Microsoft.Extensions.Hosting.Systemd NuGet包到项目中,并告诉你的新Worker,其生命周期由systemd管理!

将UseSystemd()添加到主机构建器中。

public static IHostBuilder CreateHostBuilder(string[] args) =>
  Host.CreateDefaultBuilder(args)
    .UseSystemd()
    .ConfigureServices((hostContext, services) =>
    {
      services.AddHostedService<Worker>();
    });
华山资源网 Design By www.eoogi.com
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
华山资源网 Design By www.eoogi.com

稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?