diff --git a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.SymbolMoniker.cs b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.SymbolMoniker.cs index fef07234a43e926a535f9e597b0909178ba0cad3..f0832381857db0cf1ef1a47fabe6aeb68a292845 100644 --- a/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.SymbolMoniker.cs +++ b/src/EditorFeatures/Core/FindUsages/AbstractFindUsagesService.SymbolMoniker.cs @@ -28,9 +28,6 @@ internal abstract partial class AbstractFindUsagesService if (moniker == null) return; - // Let the find-refs window know we have outstanding work - await using var _ = await context.ProgressTracker.AddSingleItemAsync().ConfigureAwait(false); - var displayParts = GetDisplayParts(definition).AddRange(new[] { new TaggedText(TextTags.Space, " "), diff --git a/src/VisualStudio/Core/Def/Implementation/FindUsages/VisualStudioFindSymbolMonikerUsagesService.cs b/src/VisualStudio/Core/Def/Implementation/FindUsages/VisualStudioFindSymbolMonikerUsagesService.cs index 34a0d78afc468fa495eca98122370b16cdba485c..a51d21754d3ea1d92296012595fee84446fbc2f4 100644 --- a/src/VisualStudio/Core/Def/Implementation/FindUsages/VisualStudioFindSymbolMonikerUsagesService.cs +++ b/src/VisualStudio/Core/Def/Implementation/FindUsages/VisualStudioFindSymbolMonikerUsagesService.cs @@ -49,23 +49,34 @@ internal partial class VisualStudioFindSymbolMonikerUsagesService : AbstractFind if (_codeIndexProvider == null) yield break; + // Only grab the first 500 results. This keeps server load lower and is acceptable for //build demo purposes. + const int PageCount = 5; + + // Let the find-refs window know we have outstanding work + await progress.AddItemsAsync(PageCount).ConfigureAwait(false); + var convertedMonikers = ConvertMonikers(monikers); - var currentPage = 0; - while (true) + + // Keep track if we're done or not. This helps us simply loop and keep marking progress as done. + var done = false; + + for (var currentPage = 0; currentPage < PageCount; currentPage++) { - var referenceItems = await FindReferencesByMonikerAsync( - _codeIndexProvider, definition, convertedMonikers, progress, currentPage, cancellationToken).ConfigureAwait(false); + if (!done) + { + var referenceItems = await FindReferencesByMonikerAsync( + _codeIndexProvider, definition, convertedMonikers, progress, currentPage, cancellationToken).ConfigureAwait(false); - // If we got no items, we're done. - if (referenceItems.Length == 0) - break; + // If we got no items, we're done. + if (referenceItems.Length == 0) + done = true; - foreach (var item in referenceItems) - yield return item; + foreach (var item in referenceItems) + yield return item; + } - // Otherwise, we got some items. Return them to our caller and attempt to retrieve - // another page. - currentPage++; + // Let the window know one page of results is done. + await progress.ItemCompletedAsync().ConfigureAwait(false); } } @@ -73,13 +84,10 @@ internal partial class VisualStudioFindSymbolMonikerUsagesService : AbstractFind ICodeIndexProvider codeIndexProvider, DefinitionItem definition, ImmutableArray monikers, IStreamingProgressTracker progress, int pageIndex, CancellationToken cancellationToken) { - // Let the find-refs window know we have outstanding work - await using var _1 = await progress.AddSingleItemAsync().ConfigureAwait(false); - var results = await FindReferencesByMonikerAsync( codeIndexProvider, monikers, pageIndex, cancellationToken).ConfigureAwait(false); - using var _2 = ArrayBuilder.GetInstance(out var referenceItems); + using var _ = ArrayBuilder.GetInstance(out var referenceItems); foreach (var result in results) referenceItems.Add(ConvertResult(definition, result));