ASP.NET Core 2.1アプリケーションにBackgroundServiceを実装しました。
_public class MyBackgroundService : BackgroundService
{
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
while (true)
{
await DoSomethingAsync();
await Task.Delay(10 * 1000);
}
return Task.CompletedTask;
}
}
_
ConfigureServices()
メソッドに登録しました:
_services.AddSingleton<MyBackgroundService>();
_
私は現在、(しぶしぶ)StartAsync()
メソッド内からConfigure()
メソッドを呼び出して(待機せずに)開始しています:
_app.ApplicationServices.GetService<SummaryCache>().StartAsync(new CancellationToken());
_
長期実行サービスを開始するためのベストプラクティスの方法は何ですか?
StartAsyncを明示的に呼び出す必要はありません。
呼び出し中
_services.AddSingleton<MyBackgroundService>();
_
すべてのサービス実装はIHostedServiceインターフェイスを介してDI経由で解決されるため、機能しません。 編集:例svcProvider.GetServices<IHostedService>() -> IEnumerable<IHostedService>
次のいずれかを呼び出す必要があります。
_services.AddSingleton<IHostedService, MyBackgroundService>();
_
または
_services.AddHostedService<MyBackgroundService>();
_
編集:AddHostedServiceはIHostedServiceも登録します: https://docs.Microsoft.com/en-us/dotnet/api/Microsoft.extensions.dependencyinjection.servicecollectionhostedserviceextensions.addhostedservice?view = aspnetcore-2.2