Currently, outlining tags are synchronously computed during document open. This calculation is not always fast, and will hang the editor for some files. Outlining tags should be asynchronously computed to avoid delays in presenting a file.
Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.SyntaxNode.GetRedElement(ref Microsoft.CodeAnalysis.SyntaxNode element, int slot) Unknown
Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.Syntax.SyntaxList.SeparatedWithManyChildren.GetNodeSlot(int i) Unknown
Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.ChildSyntaxList.ItemInternal(Microsoft.CodeAnalysis.SyntaxNode node, int index) Unknown
Microsoft.CodeAnalysis.dll!Microsoft.CodeAnalysis.SyntaxNavigator.GetPreviousToken(Microsoft.CodeAnalysis.SyntaxToken current, System.Func<Microsoft.CodeAnalysis.SyntaxToken, bool> predicate, bool searchInsideCurrentTokenLeadingTrivia, System.Func<Microsoft.CodeAnalysis.SyntaxTrivia, bool> stepInto) Unknown
> Microsoft.CodeAnalysis.CSharp.Features.dll!Microsoft.CodeAnalysis.CSharp.Structure.InitializerExpressionStructureProvider.CollectBlockSpans(Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax node, Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder<Microsoft.CodeAnalysis.Structure.BlockSpan> spans, Microsoft.CodeAnalysis.Options.OptionSet options, System.Threading.CancellationToken cancellationToken) Line 65 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.AbstractSyntaxNodeStructureProvider<Microsoft.CodeAnalysis.CSharp.Syntax.InitializerExpressionSyntax>.CollectBlockSpans(Microsoft.CodeAnalysis.SyntaxNode node, Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder<Microsoft.CodeAnalysis.Structure.BlockSpan> spans, Microsoft.CodeAnalysis.Options.OptionSet options, System.Threading.CancellationToken cancellationToken) Line 47 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.AbstractSyntaxNodeStructureProvider<System.__Canon>.CollectBlockSpans(Microsoft.CodeAnalysis.Document document, Microsoft.CodeAnalysis.SyntaxNode node, Microsoft.CodeAnalysis.PooledObjects.ArrayBuilder<Microsoft.CodeAnalysis.Structure.BlockSpan> spans, System.Threading.CancellationToken cancellationToken) Line 26 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.BlockSpanCollector.GetBlockSpans(Microsoft.CodeAnalysis.SyntaxNode node) Line 65 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.BlockSpanCollector.Collect(Microsoft.CodeAnalysis.SyntaxNode root) Line 59 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.AbstractBlockStructureProvider.ProvideBlockStructureWorker(Microsoft.CodeAnalysis.Structure.BlockStructureContext context, Microsoft.CodeAnalysis.SyntaxNode syntaxRoot) Line 70 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.AbstractBlockStructureProvider.ProvideBlockStructure(Microsoft.CodeAnalysis.Structure.BlockStructureContext context) Line 38 C#
Microsoft.CodeAnalysis.Features.dll!Microsoft.CodeAnalysis.Structure.BlockStructureServiceWithProviders.GetBlockStructure(Microsoft.CodeAnalysis.Document document, System.Threading.CancellationToken cancellationToken) Line 60 C#
Microsoft.CodeAnalysis.EditorFeatures.Wpf.dll!Microsoft.CodeAnalysis.Editor.Implementation.Structure.AbstractStructureTaggerProvider<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag>.ProduceTagsSynchronously(Microsoft.CodeAnalysis.Editor.Tagging.TaggerContext<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag> context, Microsoft.CodeAnalysis.Editor.DocumentSnapshotSpan documentSnapshotSpan, int? caretPosition) Line 127 C#
Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.Editor.Tagging.AbstractAsynchronousTaggerProvider<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag>.ProduceTagsSynchronously(Microsoft.CodeAnalysis.Editor.Tagging.TaggerContext<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag> context) Line 214 C#
Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.Editor.Tagging.AbstractAsynchronousTaggerProvider<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag>.TagSource.GetAccurateTagIntervalTreeForBuffer(Microsoft.VisualStudio.Text.ITextBuffer buffer, System.Threading.CancellationToken cancellationToken) Line 662 C#
Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.Editor.Tagging.AbstractAsynchronousTaggerProvider<Microsoft.VisualStudio.Text.Tagging.IOutliningRegionTag>.Tagger.GetTagsWorker(Microsoft.VisualStudio.Text.NormalizedSnapshotSpanCollection requestedSpans, bool accurate, System.Threading.CancellationToken cancellationToken) Line 236 C#
Microsoft.CodeAnalysis.EditorFeatures.dll!Microsoft.CodeAnalysis.Editor.Tagging.AbstractAsynchronousTaggerProvider<System.__Canon>.Tagger.GetAllTags(Microsoft.VisualStudio.Text.NormalizedSnapshotSpanCollection requestedSpans, System.Threading.CancellationToken cancellationToken) Line 219 C#
Microsoft.VisualStudio.LanguageServices.dll!Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService.AbstractLanguageService<Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpPackage, Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpLanguageService>.EnsureOutliningTagsComputed(Microsoft.VisualStudio.Text.Editor.IWpfTextView wpfTextView) Line 351 C#
Microsoft.VisualStudio.LanguageServices.dll!Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService.AbstractLanguageService<Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpPackage, Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpLanguageService>.ConditionallyCollapseOutliningRegions(Microsoft.VisualStudio.TextManager.Interop.IVsTextView textView, Microsoft.VisualStudio.Text.Editor.IWpfTextView wpfTextView, Microsoft.CodeAnalysis.Workspace workspace, bool isOpenMetadataAsSource) Line 311 C#
Microsoft.VisualStudio.LanguageServices.dll!Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService.AbstractLanguageService<Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpPackage, Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpLanguageService>.SetupNewTextView(Microsoft.VisualStudio.TextManager.Interop.IVsTextView textView) Line 254 C#
Microsoft.VisualStudio.LanguageServices.dll!Microsoft.VisualStudio.LanguageServices.Implementation.LanguageService.AbstractLanguageService<Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpPackage, Microsoft.VisualStudio.LanguageServices.CSharp.LanguageService.CSharpLanguageService>.VsCodeWindowManager.AddAdornments() Line 156 C#
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.CompoundTextViewWindow.TextDocData_OnNewLanguageService(ref System.Guid sidLangServiceID) Unknown
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.CompoundTextViewWindowPane.OnTextViewHostUpdated(object sender, System.EventArgs e) Unknown
Microsoft.VisualStudio.Editor.Implementation.dll!Microsoft.VisualStudio.Editor.Implementation.SimpleTextViewWindow.Init_InitializeWpfTextView() Unknown
Currently, outlining tags are synchronously computed during document open. This calculation is not always fast, and will hang the editor for some files. Outlining tags should be asynchronously computed to avoid delays in presenting a file.
🔗 Originally reported at https://developercommunity.visualstudio.com/content/problem/466998/vs-1597-ide-hang.html
Stack trace taken during a UI delay: