Пример #1
0
        /// <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);
        }
Пример #2
0
 public void VisitNodes(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken))
 {
     lock (this)
     {
         this._root.Visit(visitor, ct);
     }
 }
Пример #3
0
        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();
            }
        }
Пример #4
0
 public void VisitNodes(ILibraryNodeVisitor visitor, CancellationToken ct = default(CancellationToken)) {
     lock (this) {
         _root.Visit(visitor, ct);
     }
 }
Пример #5
0
 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();
     }
 }