ASP.NET CoreのドキュメントにGeneric Host(汎用ホスト)というのがあったのだが、
これはWebホストと同じ書き方で、どんなアプリケーションも実装できるようになるよ。
ということでよいのかな?
下のコードで試したのだが、いい感じに非同期で動いてくれるようで。
ちょっとしたことを実装するのがどんどん簡単になっていくね。
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace AspNetCoreHostingDemo
{
class Program
{
static async Task Main(string[] args)
{
var host = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<MyService1>();
services.AddHostedService<MyService2>();
services.AddHostedService<MyService3>();
})
.UseConsoleLifetime()
.Build();
await host.RunAsync();
}
}
class MyService1 : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(1* 1000, stoppingToken);
Console.WriteLine("xxx");
}
}
}
class MyService2 : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(5 * 1000, stoppingToken);
Console.WriteLine("yyy");
}
}
}
class MyService3 : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
await Task.Delay(10 * 1000, stoppingToken);
Console.WriteLine("zzz");
}
}
}
}