C# - ASP.NET Core Generic Host


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");
            }
        }
    }
}

関連記事