如何使 ExecuteAsync 异步运行

问题描述 投票:0回答:1

我有 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 应用程序将停止在该方法上。我怎样才能并排?

c# .net backgroundworker
1个回答
0
投票

这是 ASP.NET Core 中的一个已知问题。 您可以将

await Task.Yield()
添加到
ExecuteAsync()
的顶部,它将起作用:

protected async override Task ExecuteAsync(CancellationToken stoppingToken)
{
   await Task.Yield();

   new MyInfiniteLoopClass();
}

更多信息:https://github.com/dotnet/runtime/issues/36063

© www.soinside.com 2019 - 2024. All rights reserved.