【发布时间】:2019-03-24 04:41:20
【问题描述】:
我在 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());
启动长时间运行服务的最佳实践方法是什么?
【问题讨论】:
-
查看 Steve Gordon 的博客:stevejgordon.co.uk/asp-net-core-2-ihostedservice
-
@junnas 不幸的是,这似乎已过时(BackgroundService 可用之前的 ASP.NET 2.0 预览版),并且它没有解释如何在不显式调用 StartAsync() 的情况下启动服务
-
可以选择hangfire吗? hangfire.io
-
默认情况下,注册
services.AddSingleton<MyBackgroundService>();后会在应用启动时启动,不需要在你自己的代码中专门调用StartAsync()。 -
有什么办法可以停止后台服务自动启动,而是按需启动?
标签: c# asp.net-core dependency-injection background-task