晴耕雨読

working in the fields on fine days and reading books on rainy days

[C#] Workerを使ってサービスを実装する

C#の Worker を使ってサービスを実装する方法について説明します。

Workerプロジェクトの作成

現在のフォルダに Worker サービスのテンプレートを生成します。

dotnet new worker

サービスの実装

Program.cs(プログラムのエントリーポイント):

namespace TestWorker;

var builder = Host.CreateApplicationBuilder(args);
// Workerをサービスとして登録する
builder.Services.AddHostedService<Worker>();

var host = builder.Build();
host.Run();

Worker.cs(サービスの実装):

namespace TestWorker;

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

このプログラムを実行すると、1秒ごとにログにメッセージを書き込む処理が停止するまで続きます。

info: TestWorker.Worker[0]
      Worker running at: 10/14/2024 15:53:39 +09:00
info: TestWorker.Worker[0]
      Worker running at: 10/14/2024 15:53:40 +09:00
info: TestWorker.Worker[0]
      Worker running at: 10/14/2024 15:53:41 +09:00

この後は、サービスを起動させたいOSごとに、追加のパッケージのインストールと、サービスインストール用の資材の作成が必要になります。 詳細は以下のページを参考にしてください。

以上です。

参考資料