I가 다음 노드 :확인을 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 매개 변수를 사용해야한다고 생각하십니까? - 마지막으로 해당 작업을 취소 할 수 있으면 좋을 것입니다. 해당 메서드에 취소 토큰도 전달해야합니까?
올바른 방법은 무엇입니까?
죄송합니다 제가 닷넷 프레임 워크 4.0
도와 줘? http://stackoverflow.com/a/20281941/1210520 –
가능한 중복 [Task.WhenAny 할 때 반환 항목을 양보하는 방법] (http://stackoverflow.com/questions/18284169/how-to-yield-return- item-when-doing-task-whenany) –