私の理解では、ContinueWith メソッドは問題のタスクが完了するのを待ちます。次のコードの場合、これは、子タスクが完了したときに終了したことを意味します。これが本当なら、0 0 0 と 0 1 2 を出力することがあるのはなぜですか?
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();
}