我有这个梅托德:
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
?
您需要await
对StartAsync
的调用:
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
返回的任务可以按预期等待。