【发布时间】:2013-10-07 12:55:58
【问题描述】:
我开始在 C# 中使用任务。 我正在尝试执行此代码。
private static void CreateSubtask() {
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(
parentTask =>
{
foreach (int i in parentTask.Result)
Console.WriteLine(i);
});
finalTask.Wait();
}
finalTask 仅在父 Task 完成后运行,而父 Task 在所有三个子节点都完成后才运行。您可以使用它来创建相当复杂的 Task 层次结构,这些层次结构将执行您指定的所有步骤。
我从执行中得到的是三行内容:
0
0
0
我期待他们成为
0
1
2
我说的对吗?
【问题讨论】:
-
我不熟悉任务并行库,但我猜您在任务
parent中创建的三个任务在您从parent阅读时尚未运行结果。似乎您在等待parent完成,而不是等待在parent内创建的三个任务。 -
我运行了你的代码,得到 0 1 2 这是我所期望的
标签: c# parallel-processing task-parallel-library