private void OnDependenciesSnapshotChanged(object sender, SnapshotChangedEventArgs e)
        {
            IDependenciesSnapshot snapshot = e.Snapshot;

            if (snapshot == null)
            {
                return;
            }

            if (_tasksService.UnloadCancellationToken.IsCancellationRequested || e.Token.IsCancellationRequested)
            {
                return;
            }

            // Take the highest priority view provider
            IDependenciesTreeViewProvider viewProvider = _viewProviders.FirstOrDefault()?.Value;

            if (viewProvider == null)
            {
                return;
            }

            try
            {
                _ = SubmitTreeUpdateAsync(
                    async(treeSnapshot, configuredProjectExports, cancellationToken) =>
                {
                    IProjectTree dependenciesNode = treeSnapshot.Value.Tree;

                    if (!cancellationToken.IsCancellationRequested)
                    {
                        dependenciesNode = await viewProvider.BuildTreeAsync(dependenciesNode, snapshot, cancellationToken);

                        await _treeTelemetryService.ObserveTreeUpdateCompletedAsync(snapshot.HasUnresolvedDependency);
                    }

                    // TODO We still are getting mismatched data sources and need to figure out better
                    // way of merging, mute them for now and get to it in U1
                    return(new TreeUpdateResult(dependenciesNode));
                },
                    _treeUpdateCancellationSeries.CreateNext(e.Token));
            }
            catch (OperationCanceledException)
            {
            }
            catch (Exception ex)
            {
                // We do not expect any exception when we call SubmitTreeUpdateAsync, but we don't want to leak an exception here.
                // Because it will fail the dataflow block and stops updating the project tree silently.
                _ = ProjectFaultHandlerService.ReportFaultAsync(ex, UnconfiguredProject);
            }
        }
예제 #2
0
        private void OnDependenciesSnapshotChanged(object sender, SnapshotChangedEventArgs e)
        {
            IDependenciesSnapshot snapshot = e.Snapshot;

            if (snapshot == null)
            {
                return;
            }

            if (_tasksService.UnloadCancellationToken.IsCancellationRequested || e.Token.IsCancellationRequested)
            {
                return;
            }

            // Take the highest priority view provider
            IDependenciesTreeViewProvider viewProvider = _viewProviders.FirstOrDefault()?.Value;

            if (viewProvider == null)
            {
                return;
            }

            _ = SubmitTreeUpdateAsync(
                async(treeSnapshot, configuredProjectExports, cancellationToken) =>
            {
                IProjectTree dependenciesNode = treeSnapshot.Value.Tree;

                if (!cancellationToken.IsCancellationRequested)
                {
                    dependenciesNode = await viewProvider.BuildTreeAsync(dependenciesNode, snapshot, cancellationToken);

                    await _treeTelemetryService.ObserveTreeUpdateCompletedAsync(snapshot.HasUnresolvedDependency);
                }

                // TODO We still are getting mismatched data sources and need to figure out better
                // way of merging, mute them for now and get to it in U1
                return(new TreeUpdateResult(dependenciesNode));
            },
                _treeUpdateCancellationSeries.CreateNext(e.Token));
        }