.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(...)
中完成你的工作,然后永远不会完成。
感谢您的反馈!很有用。
我最终没有为这种事情使用 HostedService,而是将它移到了我在端点中调用的服务中。
虽然它仍然是一个 HostedService,但我通过使用包含 StartAsync 中的逻辑的方法创建一个新线程来启动该线程来解决它。这解决了阻塞问题。
我需要阅读有关线程的更多信息!
我有一个后台服务 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(...)
中完成你的工作,然后永远不会完成。
感谢您的反馈!很有用。
我最终没有为这种事情使用 HostedService,而是将它移到了我在端点中调用的服务中。
虽然它仍然是一个 HostedService,但我通过使用包含 StartAsync 中的逻辑的方法创建一个新线程来启动该线程来解决它。这解决了阻塞问题。
我需要阅读有关线程的更多信息!