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); } }
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)); }