/// <summary> /// Visit this node and its children. /// </summary> /// <param name="visitor">Visitor to invoke methods on when visiting the nodes.</param> public void Visit(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken)) { if (ct.IsCancellationRequested) { visitor.LeaveNode(this, ct); return; } if (visitor.EnterNode(this, ct)) { lock (Children) { foreach (var child in Children) { if (ct.IsCancellationRequested) { visitor.LeaveNode(this, ct); return; } child.Visit(visitor, ct); } } } visitor.LeaveNode(this, ct); }
public void VisitNodes(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken)) { lock (this) { this._root.Visit(visitor, ct); } }
internal async Task VisitNodesAsync(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken)) { await _searching.WaitAsync(); try { await Task.Run(() => _root.Visit(visitor, ct)); ApplyUpdates(true); } finally { _searching.Release(); } }
public void VisitNodes(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken)) { lock (this) { _root.Visit(visitor, ct); } }