在核心 ASP.NET 启动后台服务的正确方法



我在 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>();

不起作用,因为所有服务实现都是通过 DI 通过 IHostedService 接口解析的。编辑: 例如svcProvider.GetServices<IHostedService>() -> IEnumerable<IHostedService>

您需要致电:

services.AddSingleton<IHostedService, MyBackgroundService>();

services.AddHostedService<MyBackgroundService>();

编辑:AddHostedService 还注册了一个 IHostedService: https://learn.microsoft.com/en-us/dotnet/api/microsoft.extensions.dependencyinjection.servicecollectionhostedserviceextensions.addhostedservice?view=aspnetcore-2.2

最新更新