internal async Task SearchAsync(CancellationToken cancellationToken) { var isFullyLoaded = true; try { using var navigateToSearch = Logger.LogBlock(FunctionId.NavigateTo_Search, KeyValueLogMessage.Create(LogType.UserAction), cancellationToken); using var asyncToken = _asyncListener.BeginAsyncOperation(GetType() + ".Search"); // We consider ourselves fully loaded when both the project system has completed loaded us, and we've // totally hydrated the oop side. Until that happens, we'll attempt to return cached data from languages // that support that. isFullyLoaded = await _host.IsFullyLoadedAsync(cancellationToken).ConfigureAwait(false); await SearchAllProjectsAsync(isFullyLoaded, cancellationToken).ConfigureAwait(false); } catch (OperationCanceledException) { } finally { // providing this extra information will make UI to show indication to users // that result might not contain full data _callback.Done(isFullyLoaded); } }
internal async Task SearchAsync() { try { using var navigateToSearch = Logger.LogBlock(FunctionId.NavigateTo_Search, KeyValueLogMessage.Create(LogType.UserAction), _cancellationToken); using var asyncToken = _asyncListener.BeginAsyncOperation(GetType() + ".Search"); _progress.AddItems(_solution.Projects.Count()); var workspace = _solution.Workspace; // If the workspace is tracking documents, use that to prioritize our search // order. That way we provide results for the documents the user is working // on faster than the rest of the solution. var docTrackingService = workspace.Services.GetService<IDocumentTrackingService>(); if (docTrackingService != null) { await SearchProjectsInPriorityOrderAsync(docTrackingService).ConfigureAwait(false); } else { await SearchAllProjectsAsync().ConfigureAwait(false); } } catch (OperationCanceledException) { } finally { var service = _solution.Workspace.Services.GetRequiredService<IWorkspaceStatusService>(); var isFullyLoaded = await service.IsFullyLoadedAsync(_cancellationToken).ConfigureAwait(false); // providing this extra information will make UI to show indication to users // that result might not contain full data _callback.Done(isFullyLoaded); } }
public async Task SearchAsync( bool searchCurrentDocument, NavigateToSearchScope scope, CancellationToken cancellationToken) { var isFullyLoaded = true; try { using var navigateToSearch = Logger.LogBlock(FunctionId.NavigateTo_Search, KeyValueLogMessage.Create(LogType.UserAction), cancellationToken); if (searchCurrentDocument) { await SearchCurrentDocumentAsync(cancellationToken).ConfigureAwait(false); } else { // We consider ourselves fully loaded when both the project system has completed loaded us, and we've // totally hydrated the oop side. Until that happens, we'll attempt to return cached data from languages // that support that. isFullyLoaded = await _host.IsFullyLoadedAsync(cancellationToken).ConfigureAwait(false); await SearchAllProjectsAsync(isFullyLoaded, scope, cancellationToken).ConfigureAwait(false); } } finally { // Ensure that we actually complete all our remaining progress items so that the progress bar completes. await ProgressItemsCompletedAsync(_remainingProgressItems, cancellationToken).ConfigureAwait(false); Debug.Assert(_remainingProgressItems == 0); // Pass along isFullyLoaded so that the UI can show indication to users that results may be incomplete. _callback.Done(isFullyLoaded); } }
internal async Task SearchAsync(CancellationToken cancellationToken) { var searchWasComplete = true; try { using var navigateToSearch = Logger.LogBlock(FunctionId.NavigateTo_Search, KeyValueLogMessage.Create(LogType.UserAction), cancellationToken); using var asyncToken = _asyncListener.BeginAsyncOperation(GetType() + ".Search"); searchWasComplete = await SearchAllProjectsAsync(cancellationToken).ConfigureAwait(false); } catch (OperationCanceledException) { } finally { // providing this extra information will make UI to show indication to users // that result might not contain full data _callback.Done(searchWasComplete); } }
internal async Task SearchAsync() { try { using var navigateToSearch = Logger.LogBlock(FunctionId.NavigateTo_Search, KeyValueLogMessage.Create(LogType.UserAction), _cancellationToken); using var asyncToken = _asyncListener.BeginAsyncOperation(GetType() + ".Search"); _progress.AddItems(_solution.Projects.Count()); await SearchAllProjectsAsync().ConfigureAwait(false); } catch (OperationCanceledException) { } finally { var service = _solution.Workspace.Services.GetRequiredService <IWorkspaceStatusService>(); var isFullyLoaded = await service.IsFullyLoadedAsync(_cancellationToken).ConfigureAwait(false); // providing this extra information will make UI to show indication to users // that result might not contain full data _callback.Done(isFullyLoaded); } }