作者:mobiledu2502912907 | 来源:互联网 | 2022-12-02 18:11
我正在尝试使用IHostedService创建后台服务.如果我只有一个后台服务,一切正常.当我尝试创建多个实现时,IHostedService
只有第一个实际运行的实现.
services.AddSingleton();
services.AddSingleton();
在上面的例子StartAsync
上HostedServiceOne
被调用,但StartAsync
上HostedServiceTwo
不会被调用.如果我换登记的两种实现方式的顺序IHostedService
(把IHostedServiceTwo
前IHostedServiceOne
),然后StartAsync
在HostedServiceTwo
被调用而从来不是HostedServiceOne
.
编辑:
我被引导到以下内容:
如何在Asp.Net Core中注册同一接口的多个实现?
然而,这不适合IHostedService
.要使用建议的方法,我将不得不打电话,serviceProvider.GetServices();
但似乎IHostedService.StartAsync
似乎在内部调用.我甚至不确定我会在哪里触发它IHostedService.StartAsync
.
1> 小智..:
我有同样的问题。必须在每个服务中返回Task.CompletedTask;
public class MyHostedService: IHostedService
{
public Task StartAsync(CancellationToken cancellationToken)
{
Task.Run(() => SomeInfinityProcess(cancellationToken));
return Task.CompletedTask;
}
public void SomeInfinityProcess(CancellationToken cancellationToken)
{
for (; ; )
{
Thread.Sleep(1000);
if (cancellationToken.IsCancellationRequested)
break;
}
}
public Task StopAsync(CancellationToken cancellationToken)
{
return Task.CompletedTask;
}
}
Startup.cs是相同的:
services.AddHostedService();
services.AddHostedService();
...
2> itminus..:
注册HostedService
如下:
// services.AddSingleton();
// services.AddSingleton();
services.AddHostedService();
services.AddHostedService();
它将按预期工作.