我有以下节点:让IEnumerable的方法异步
class Node
{
public string Name;
public IEnumerable<Node> Children;
}
我有以下的扩展方法:
public static class ExtensionMethods
{
public static IEnumerable<Node> TraverseTree(this Node root)
{
if (root.Children != null)
{
foreach (var child in root.Children)
{
var nodes = TraverseTree(child);
foreach (var node in nodes)
{
yield return node;
}
}
}
yield return root;
}
}
我想搜索在名为“富”树中的一个节点。为了做到这一点我做的:
Node myNode = /* some large tree! */
var search = myNode.TraverseTree().Where(x=>x.Name == "Foo").FirstOrDefault();
我有3个进球
- 有方法
TraverseTree
横向与产量(IEnumerable的)树,这样,如果这是第3节点恰好有名称= =“Foo”,那么我不必遍历整个树。 现在这种情况是真的。 - 使方法
TraverseTree
在单独的线程上运行,因为它可能需要很长时间才能找到。所以我猜TraverseTree
方法应该带一个callBack参数? - 最后,它将很高兴能够取消该操作。我是否还需要传递给该方法的取消令牌?
这样做的正确方法是什么?
对不起,我忘了提我使用.NET Framework 4.0
请问这个答案 帮帮我? http://stackoverflow.com/a/20281941/1210520 – 2014-10-30 21:34:43
可能的重复[如何在产生Task.WhenAny时返回项目](http://stackoverflow.com/questions/18284169/how-to-yield-return- item-when-doing-task-whenany) – 2014-10-30 21:35:09