在 System.Threading.Timer 回调中等待

Await inside System.Threading.Timer callback

我正在做一个 ASP.NET 网络 API 并且有一个 BackgroundService 这样的:

里面Doing,我等待任务1:

问题在于 TimeSpan.FromSeconds(0.5))ExecuteAsync 会在不等待我的任务完成的情况下创建一个新的 Doing()

控制台结果:

我该如何解决这个问题?或者有没有办法通过等待任务完成来实现后台任务?

不要使用 Timer。 而是设置 loop 并使用 Task.Delay 作为等待时间。

protected override async Task ExecuteAsync(CancellationToken cancellationToken)
{
    var delay = TimeSpan.FromSeconds(0.5);
    
    while (!cancellationToken.IsCancellationRequested)
    {                            
        await Doing();
        await Task.Delay(delay, cancellationToken);
    }
}

参见 Microsofts documentation 中的示例。