假设我有以下情况:
public void Foo()
{
Task.Run(() => DoWork())
.ContinueWith((prev) =>
{
Console.WriteLine("Hello World!");
}
}
public void DoWork()
{
Task.Run(() => HeavyOperation());
Task.Run(() => HeavyOperation2());
Task.Run(() => HeavyOperation3());
}
我需要等待 DoWork
中的所有任务完成后才能显示 Hello World
,实际上我的代码会显示 Hello World
但任务里面的方法还在运行
最佳答案
您可以使用 Task.WhenAll
返回等待所有任务的 Task
:
public Task DoWork()
{
return Task.WhenAll(
Task.Run(() => HeavyOperation()),
Task.Run(() => HeavyOperation2()),
Task.Run(() => HeavyOperation3()));
}
注意:为了遵循约定,您应该调用此 DoWorkAsync
:
public Task DoWorkAsync()
{
return Task.WhenAll(
Task.Run(() => HeavyOperation()),
Task.Run(() => HeavyOperation2()),
Task.Run(() => HeavyOperation3()));
}
此外,这些操作已经在不同的线程上运行,您不需要 Task.Run
来调用 DoWorkAsync
:
DoWorkAsync()
.ContinueWith((prev) =>
{
Console.WriteLine("Hello World!");
};
关于c# - 如何等待嵌套任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50491552/