在 ASP.NET Core 中启动 BackgroundService 的正确方法
Correct way to start a BackgroundService in ASP.NET Core
我在 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>();
我目前(不情愿地)通过从 Configure()
方法中调用(而不是等待)StartAsync()
方法来启动它:
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
我在 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>();
我目前(不情愿地)通过从 Configure()
方法中调用(而不是等待)StartAsync()
方法来启动它:
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