【发布时间】:2016-03-09 17:27:17
【问题描述】:
我正在尝试在循环中实现嵌套任务 - 这是我目前的模式,但我不确定,因为这是我第一次使用并行任务库。
父(层)任务应等待子(节点)任务完成。
public int NestedTask(IEnumerable<MatchTier> tierNodes)
{
var tier = Task<int>.Factory.StartNew(() =>
{
Task<int> node = null;
foreach(var n in tierNodes)
{
node = Task<int>.Factory.StartNew(() =>
{
// Task logic goes here
return 1; // temp placeholder
});
// if a valid value is returned then exit this loop
}
return node.Result;
});
return tier.Result;
}
子节点循环直到返回第一个有效值,然后应该退出循环,将有效值传递给父节点。
子节点和父节点都需要超时。每个子节点将被允许运行大约 3 秒,之后进程将超时并询问下一个节点。
父节点的总超时值约为 15 - 20 秒,在此之后,如果没有收到有效响应,它也应该终止。
这看起来合乎逻辑吗?
【问题讨论】:
-
老实说,您只是在等待最后的结果并返回它。你真正想做什么?
-
能否请您添加更多详细信息。 tierNodes 是您的父节点或子节点的集合?您如何从父节点获取子节点。我无法在代码中看到任何父子关系。更多信息会有所帮助
-
@Anand - 添加了更多详细信息。
-
如果在方法结束时等待它的结果,为什么要使用任务
tier?或者:为什么不直接使用内部循环创建Tasks?