.NET - HostedService 正在阻止来自 运行 的 API 的其余部分

.NET - HostedService is blocking the rest of the API from running

我有一个后台服务 class,可以打开订阅并无限期地收听,我相信这会阻止来自 运行 的 API 的其余部分。我无法调用端点,swagger 页面从不启动,但后台服务运行。

我在 Program.cs 文件中有 services.AddHostedService<BackgroundService>();,class 继承了 IHostedService,在继承的 StartAsync 函数中我调用了一个方法打开并收听订阅。这将永远不会结束,因此它会阻塞 API.

的其余部分

我该如何解决这个问题?我需要在 API 开始时永远打开此订阅,但我也需要使用 API。我知道这很可能是并发问题,但这是我的弱点。

谢谢

你可以异步地做你的事情。

class YourHostedService : IHostedService 
{
   private Task _myLongRunningTask;
   public Task StartAsync(CancellationToken cancellationToken)
   {
      _myLongRunningTask = OpenSubscriptionAndProcessAsync();
      return Task.CompletedTask;
   }

   private async Task OpenSubscriptionAndProcessAsync() 
   {  
       // your code here  
   }

   // [...]
}

IHostedServices 的启动正在等待 StartAsync(...) 完成。

在你的情况下,我认为你在 StartAsync(...) 中完成你的工作,然后永远不会完成。

IHostedService Documentation

感谢您的反馈!很有用。

我最终没有为这种事情使用 HostedService,而是将它移到了我在端点中调用的服务中。

虽然它仍然是一个 HostedService,但我通过使用包含 StartAsync 中的逻辑的方法创建一个新线程来启动该线程来解决它。这解决了阻塞问题。

我需要阅读有关线程的更多信息!