在 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 中的示例。
我正在做一个 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 中的示例。