.NET Coreでは、ジェネリックホストを使用してバックグラウンドタスクを実装します。
.NET Coreで、バックグラウンドタスクを実行するためにGeneric Hostを使用する方法があります。Generic Hostは.NET Core 3.0で導入された軽量なホストで、アプリケーションのバックグラウンドタスクや定期ジョブをホスティングするために使用できます。
以下是一个简单的示例代码,展示了如何使用通用主机来实现后台任务:
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading;
using System.Threading.Tasks;
public class Program
{
public static async Task Main(string[] args)
{
await CreateHostBuilder(args).RunConsoleAsync();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddHostedService<BackgroundService>();
});
}
public class BackgroundService : BackgroundService
{
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
while (!stoppingToken.IsCancellationRequested)
{
// 执行后台任务的逻辑
Console.WriteLine("Running background task...");
// 等待一段时间
await Task.Delay(TimeSpan.FromSeconds(10), stoppingToken);
}
}
}
上記の例では、BackgroundServiceクラスを作成しました。このクラスは、BackgroundService基底クラスを継承しており、基底クラスにはバックグラウンドタスクを実行するための抽象メソッドExecuteAsyncが用意されています。Program.csファイルでは、ConfigureServicesメソッドを使用してBackgroundServiceサービスを登録し、MainメソッドでRunConsoleAsyncメソッドを呼び出してバックグラウンドタスクを起動しています。
BackgroundServiceのExecuteAsyncメソッドは、バックグラウンドタスクのロジックを毎ループ実行する無限ループであることに留意する必要があります。後ろ向きの仕事をキャンセルする必要があるかどうかを確認するために、stoppingToken.IsCancellationRequestedメソッドを呼び出し、また、一定時間待つためにTask.Delayメソッドを使用することができます。
.NET Coreで簡単なバックグラウンドタスクを実装することができます。より複雑な機能が必要な場合は、BackgroundServiceクラスを拡張し、必要に応じて適切なメソッドを上書きすることができます。