任务.延迟意外行为

  • 本文关键字:意外 延迟 任务 c#
  • 更新时间 :
  • 英文 :


我有这个梅托德:

public async Task StartAsync(Task process)
{
if (process is null)
{
throw new ArgumentNullException(nameof(process));
}
var loading = ...;
await Task.WhenAll(process, loading).ContinueWith(t => EndProgress());
}

并通过如下命令调用:

private async Task TestAsync()
{
await StartAsync(new Task(async () =>
{
//just for testing purpose
await Task.Delay(15000);
}));
}
ExecuteDelegate = async param => await TestAsync();

其中ExecuteDelegate是命令使用的Action<T>委托。

为什么await Task.WhenAll线没有等待这 15 秒Task.Dalay

您需要awaitStartAsync的调用:

private async Task TestAsync()
{
await StartAsync(new Task(async () =>
{
await Task.Delay(15000);
}));
}

注意:您还可以通过不创建冗余Task来简化代码:

private async Task TestAsync()
{
await StartAsync(Task.Delay(15000));
}

甚至更简单:

private Task TestAsync()
{
return StartAsync(Task.Delay(15000));
}

不应使用构造函数来创建Task,而应使用静态Task.Run方法:

private async Task TestAsync()
{
await StartAsync(Task.Run(async () =>
{
//just for testing purpose
await Task.Delay(15000);
}));
}

Task.Run返回的任务可以按预期等待。

最新更新