diff --git a/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/ExtensionMethodImportCompletionHelper.ExtensionMethodSymbolComputer.cs b/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/ExtensionMethodImportCompletionHelper.ExtensionMethodSymbolComputer.cs index 9e44b34adf2c893ba8e57bb42cfad8e3e392f5ad..cf98d70292ea1720b6dc7c58ad1b241d0e5c00c5 100644 --- a/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/ExtensionMethodImportCompletionHelper.ExtensionMethodSymbolComputer.cs +++ b/src/Features/Core/Portable/Completion/Providers/ImportCompletionProvider/ExtensionMethodImportCompletionHelper.ExtensionMethodSymbolComputer.cs @@ -84,7 +84,7 @@ public Task PopulateIndicesAsync(CancellationToken cancellationToken) foreach (var peReference in GetAllRelevantPeReferences()) { tasks.Add(Task.Run(() - => SymbolTreeInfo.GetInfoForMetadataReferenceAsync(Solution, peReference, loadOnly: false, cancellationToken), cancellationToken)); + => SymbolTreeInfo.GetInfoForMetadataReferenceAsync(Solution, peReference, loadOnly: false, cancellationToken).AsTask(), cancellationToken)); } return Task.WhenAll(tasks.ToImmutable()); @@ -100,7 +100,7 @@ public async Task<(ImmutableArray symbols, bool isPartialResult)> tasks.Add(Task.Run(() => GetExtensionMethodSymbolsFromPeReferenceAsync( peReference, forceIndexCreation, - cancellationToken), cancellationToken)); + cancellationToken).AsTask(), cancellationToken)); } foreach (var project in GetAllRelevantProjects()) @@ -184,7 +184,7 @@ private ImmutableArray GetAllRelevantPeReferences() : GetExtensionMethodsForSymbolsFromDifferentCompilation(matchingMethodSymbols, cancellationToken); } - private async Task?> GetExtensionMethodSymbolsFromPeReferenceAsync( + private async ValueTask?> GetExtensionMethodSymbolsFromPeReferenceAsync( PortableExecutableReference peReference, bool forceIndexCreation, CancellationToken cancellationToken) diff --git a/src/Features/Core/Portable/IncrementalCaches/SymbolTreeInfoCacheService.cs b/src/Features/Core/Portable/IncrementalCaches/SymbolTreeInfoCacheService.cs index 7c883aa931f82d6d3ff1785e9bc80c97ea1971cb..5b5a10165c9a2cadaa8533d5e2316b1e5b14ce2b 100644 --- a/src/Features/Core/Portable/IncrementalCaches/SymbolTreeInfoCacheService.cs +++ b/src/Features/Core/Portable/IncrementalCaches/SymbolTreeInfoCacheService.cs @@ -29,7 +29,7 @@ private class SymbolTreeInfoCacheService : ISymbolTreeInfoCacheService _metadataIdToInfo = metadataIdToInfo; } - public async Task TryGetMetadataSymbolTreeInfoAsync( + public async ValueTask TryGetMetadataSymbolTreeInfoAsync( Solution solution, PortableExecutableReference reference, CancellationToken cancellationToken) diff --git a/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/ISymbolTreeInfoCacheService.cs b/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/ISymbolTreeInfoCacheService.cs index fdcc018b8f4bff332032113b0a53a40b63ba3954..c05a5b5774a8a3a300b4bdac63e87f4863f4b93e 100644 --- a/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/ISymbolTreeInfoCacheService.cs +++ b/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/ISymbolTreeInfoCacheService.cs @@ -20,6 +20,6 @@ internal interface ISymbolTreeInfoCacheService : IWorkspaceService /// /// Returns null if the info cannot be retrieved from the cache. /// - Task TryGetMetadataSymbolTreeInfoAsync(Solution solution, PortableExecutableReference reference, CancellationToken cancellationToken); + ValueTask TryGetMetadataSymbolTreeInfoAsync(Solution solution, PortableExecutableReference reference, CancellationToken cancellationToken); } } diff --git a/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Metadata.cs b/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Metadata.cs index 453318c58176d3f526e47d6f807de1606f33c0e4..c028a29a28f651f814875d16d0ce89ed04c7f29b 100644 --- a/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Metadata.cs +++ b/src/Workspaces/Core/Portable/FindSymbols/SymbolTree/SymbolTreeInfo_Metadata.cs @@ -65,7 +65,7 @@ private static Metadata GetMetadataNoThrow(PortableExecutableReference reference } } - public static Task GetInfoForMetadataReferenceAsync( + public static ValueTask GetInfoForMetadataReferenceAsync( Solution solution, PortableExecutableReference reference, bool loadOnly, CancellationToken cancellationToken) { @@ -79,7 +79,8 @@ private static Metadata GetMetadataNoThrow(PortableExecutableReference reference /// Produces a for a given . /// Note: will never return null; /// - public static async Task GetInfoForMetadataReferenceAsync( + [PerformanceSensitive("https://devdiv.visualstudio.com/DevDiv/_workitems/edit/1224834", OftenCompletesSynchronously = true)] + public static async ValueTask GetInfoForMetadataReferenceAsync( Solution solution, PortableExecutableReference reference, Checksum checksum,