gpt4 book ai didi

c# - IHostedService 的多种实现

转载 作者:太空狗 更新时间:2023-10-30 00:01:14 26 4
gpt4 key购买 nike

我正在尝试使用 IHostedService 创建后台服务。如果我只有一个后台服务,一切都很好。当我尝试创建多个 IHostedService 的实现时只有最先注册的才真正运行。

services.AddSingleton<IHostedService, HostedServiceOne>();
services.AddSingleton<IHostedService, HostedServiceTwo>();

在上面的示例中 StartAsyncHostedServiceOne被叫但是StartAsyncHostedServiceTwo永远不会被调用。如果我交换注册 IHostedService 的两个实现的顺序(将 IHostedServiceTwo 放在 IHostedServiceOne 之前)然后 StartAsyncHostedServiceTwo被调用但从来没有HostedServiceOne .

编辑:

我被定向到以下内容:

How to register multiple implementations of the same interface in Asp.Net Core?

但这不适用于 IHostedService .要使用建议的方法,我必须调用 serviceProvider.GetServices<IService>();但似乎 IHostedService.StartAsync好像是内部调用的。我什至不确定在哪里调用它来触发 IHostedService.StartAsync .

最佳答案

我遇到了同样的问题。需要在每个服务中返回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<MyHostedService>();
services.AddHostedService<MyHostedService2>();
...

关于c# - IHostedService 的多种实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712347/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com