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ごとに、追加のパッケージのインストールと、サービスインストール用の資材の作成が必要になります。 詳細は以下のページを参考にしてください。
- Windows (sc.exe; サービスコントローラ)
- Linux (systemd)
以上です。