- .NET Coreの場合:
.NET Coreでは、Microsoft.Extensions.Hosting名前空間のIHostedServiceインターフェースを実装することでワーカーサービスを作成できます。以下は、簡単な例です。
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
public class MyWorkerService : IHostedService
{
private Task _executingTask;
private readonly CancellationTokenSource _cts = new CancellationTokenSource();
public Task StartAsync(CancellationToken cancellationToken)
{
_executingTask = ExecuteAsync(_cts.Token);
if (_executingTask.IsCompleted)
{
return _executingTask;
}
return Task.CompletedTask;
}
public async Task StopAsync(CancellationToken cancellationToken)
{
if (_executingTask == null)
{
return;
}
try
{
_cts.Cancel();
}
finally
{
await Task.WhenAny(_executingTask, Task.Delay(Timeout.Infinite, cancellationToken));
}
}
private async Task ExecuteAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
// バックグラウンドで実行するタスクの処理を記述する
// 例: データベースからデータを取得して処理する
await Task.Delay(TimeSpan.FromSeconds(5), cancellationToken);
}
}
}
上記の例では、MyWorkerService
クラスがIHostedService
インターフェースを実装しています。StartAsync
メソッドで非同期タスクを開始し、StopAsync
メソッドでタスクを停止します。ExecuteAsync
メソッドで実際のタスクの処理を行います。
- Node.jsの場合:
Node.jsでは、worker_threads
モジュールを使用してワーカーサービスを作成することができます。以下は、簡単な例です。
const { Worker } = require('worker_threads');
function startWorker() {
const worker = new Worker('./myWorker.js');
worker.on('message', (message) => {
// ワーカーからのメッセージを処理する
});
worker.on('error', (error) => {
// エラーハンドリング
});
worker.on('exit', (code) => {
// ワーカーの終了処理
});
}
startWorker();
上記の例では、myWorker.js
ファイル内で実際のタスクの処理を行います。ワーカーからのメッセージやエラー、終了イベントをハンドリングすることができます。
これらは、ワーカーサービスを作成するための一般的な方法の一部です。プログラミング言語やフレームワークによって異なる実装方法がありますので、使用している環境に応じて適切な方法を選択してください。