很长一段时间以来我一直无法找到我的问题的答案。 BackgroundService 是否移至单独的线程?我去论坛上看到答案说后台任务被标记为LongRunning,并且每个后台服务都分配了一个单独的线程,但是在实验过程中
class TestService(ILogger<s> loger) : BackgroundService
{
private readonly ILogger<s> _loger = loger;
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
_loger.LogInformation("Фоновая задача запущена");
while (!stoppingToken.IsCancellationRequested)
{
_loger.LogInformation("Цикл");
}
}
}
整个应用程序冻结并且无法启动但是如果在第一行await Task.Yield()
或另一行包含带有异步操作的 await 中添加,则应用程序将成功启动,并且任务随后将继续运行。这是什么意思。后台任务不是在单独的线程中运行,而是在主线程中运行?或者它是在第一个之前在主线程中执行await
,然后移至单独的线程?