我有 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();
}
关于c# - 如何使 ExecuteAsync 异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77506238/