就我的理解而言,ContinueWith方法等待所讨论的任务完成。下面的代码的情况下,这意味着它完成时,它完成了它的子任务。如果这是真的,为什么它有时输出 0 0 0和其他时间0 1 2?为什么孩子的任务不会在完成之前完成.ContinueWith?
static void Main(string[] args)
{
Task<Int32[]> parent = Task.Run(() =>
{
var results = new Int32[3];
new Task(() => results[0] = 0, TaskCreationOptions.AttachedToParent).Start();
new Task(() => results[1] = 1, TaskCreationOptions.AttachedToParent).Start();
new Task(() => results[2] = 2, TaskCreationOptions.AttachedToParent).Start();
return results;
});
var finalTask = parent.ContinueWith(n =>
{
foreach (Int32 i in n.Result)
Console.WriteLine(i);
});
finalTask.Wait();
Console.ReadLine();
}
@HansPassant:从表面上看,它看起来像子任务是附着于母所以父母直到孩子们都没有完成。因此,OP已经编写了旨在正确使用'ContinueWith'的代码。问题是当子任务未能附加到父项时,它没有抛出期望的异常。轻微的代码更改完全能够在不触及“ContinueWith”的情况下获得理想的结果。 – Chris