Cre*_*yke 6 c# dependency-injection background-task 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;
}
}
Run Code Online (Sandbox Code Playgroud)
我已经用我的ConfigureServices()方法注册了它:
services.AddSingleton<MyBackgroundService>();
Run Code Online (Sandbox Code Playgroud)
我目前(勉强地)通过StartAsync()从方法内部调用(而不是等待)该方法来启动它Configure():
app.ApplicationServices.GetService<SummaryCache>().StartAsync(new CancellationToken());
Run Code Online (Sandbox Code Playgroud)
启动长期运行的服务的最佳实践方法是什么?
Cos*_*ntu 10
不需要显式调用StartAsync。
呼唤
services.AddSingleton<MyBackgroundService>();
Run Code Online (Sandbox Code Playgroud)
由于所有服务实现都是通过IHostedService接口通过DI解决的,因此将无法正常工作。
编辑:例如
svcProvider.GetServices<IHostedService>() -> IEnumerable<IHostedService>
您需要致电:
services.AddSingleton<IHostedService, MyBackgroundService>();
Run Code Online (Sandbox Code Playgroud)
要么
services.AddHostedService<MyBackgroundService>();
Run Code Online (Sandbox Code Playgroud)
编辑:AddHostedService还注册了一个IHostedService:https : //docs.microsoft.com/zh-cn/dotnet/api/microsoft.extensions.dependencyinjection.servicecollectionhostedserviceextensions.addhostedservice?view = aspnetcore-2.2
| 归档时间: |
|
| 查看次数: |
7034 次 |
| 最近记录: |