我有 asp.net 应用程序,其工作人员服务像这样初始化。
builder.Services.AddHostedService<XXX>();
然后是 Service Worker 本身。
public class XXX : BackgroundService
{
readonly ILogger<XXX> _logger;
public XXX(ILogger<XXX> logger)
{
_logger = logger;
}
public Task StartAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Service Started.");
return Task.CompletedTask;
}
public Task StopAsync(CancellationToken cancellationToken)
{
_logger.LogInformation("Service Stopped.");
return Task.CompletedTask;
}
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
new MyInfiniteLoopClass();
}
}
在 ExecuteAsync 方法中,我正在创建类 MyInfiniteLoopClass,它由无限循环组成,可以说
while(true)
。
问题是只有当我打破无限循环时,swagger 才会运行。这意味着整个 ASP.NET 应用程序将停止在该方法上。我怎样才能并排?
这是 ASP.NET Core 中的一个已知问题。 您可以将
await Task.Yield()
添加到 ExecuteAsync()
的顶部,它将起作用:
protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
await Task.Yield();
new MyInfiniteLoopClass();
}