难道不能将任务添加到 Task.WhenAll
已经在等待的列表中吗?
我想等所有任务完成,初始化后有可能创建新的任务。但是这里 Task.WhenAll
不等待稍后添加到集合中的新任务。
List<Task> tasks = new List<Task>();
var task1 = Task.Run(async () =>
{
Debug.WriteLine("task #1 started");
await Task.Delay(TimeSpan.FromSeconds(20));
Debug.WriteLine("task #1 finished");
});
var task2 = Task.Run(async () =>
{
Debug.WriteLine("task #2 started");
await Task.Delay(TimeSpan.FromSeconds(30));
Debug.WriteLine("task #2 finished");
});
var task3 = Task.Run(async () =>
{
Debug.WriteLine("task #3 started");
await Task.Delay(TimeSpan.FromSeconds(10));
var inner = Task.Run(async () =>
{
Debug.WriteLine("inner task started");
await Task.Delay(TimeSpan.FromSeconds(40));
Debug.WriteLine("inner task finished");
});
tasks.Add(inner);
Debug.WriteLine("task #3 finished");
});
tasks.Add(task1);
tasks.Add(task2);
tasks.Add(task3);
await Task.WhenAll(tasks);
Debug.WriteLine("All finished");
输出:
task #2 started
task #3 started
task #1 started
task #3 finished
inner task started
task #1 finished
task #2 finished
All finished
inner task finished < didn't wait for this to finish
最佳答案
这是因为tasks.Add(inner)
是在await Task.WhenAll(tasks)
之后执行的。要回答您的问题,首先您需要弄清楚任务#3 和任务内部 之间的关系。 IMO 内部任务应该是任务#3 的一部分。也就是说,在内部任务完成之前,任务 #3 无法完成。
await inner; //instead of tasks.Add(inner);
关于c# - 如何将任务添加到 Task.WhenAll 正在等待的集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41671492/