.NET CORE 3.0新增了Worker Services的新项目模板,能够编写长时间运行的后台服务,而且能轻松的部署成windows服务或linux守护程序。若是安装的vs2019是中文版本,Worker Services变成了辅助角色服务。Worker Services 咱也不知道怎么翻译成了这个名称,咱也不敢乱翻译,下文就保持原名称。。。,本文将会演示如何建立一个Worker Services项目,而且部署为windows服务或linux守护程序运行;html
项目建立成功以后,您会看到建立了两个类:Program和Worker。linux
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中。
windows
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接口。async
默认的worker演示,没隔1秒,循环打印运行的时间。
ide
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseWindowsService() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });
dotnet publish -c Release -o C:\WorkerPub
sc.exe create DemoWorkService binPath=C:\WorkerPub\WorkerService1.exe
查看服务状态使用一下命令工具
sc.exe query DemoWorkService
启动命令ui
sc.exe start DemoWorkService
在服务列表查看,DemoWorkService已安装成功 this
停用 、删除命令spa
sc.exe stop DemoWorkService
sc.exe delete DemoWorkService
部署linux守护程序也是很方便的执行一下两个步骤便可:翻译
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseSystemd() .ConfigureServices((hostContext, services) => { services.AddHostedService<Worker>(); });