2020using Microsoft . CodeAnalysis . Navigation ;
2121using Microsoft . CodeAnalysis . PooledObjects ;
2222using Microsoft . CodeAnalysis . StackTraceExplorer ;
23+ using Microsoft . CodeAnalysis . Threading ;
2324using Microsoft . VisualStudio . Text . Classification ;
2425
2526namespace Microsoft . VisualStudio . LanguageServices . StackTraceExplorer ;
@@ -43,13 +44,13 @@ internal sealed class StackFrameViewModel(
4344 private TextDocument ? _cachedDocument ;
4445 private int _cachedLineNumber ;
4546
46- private CancellationTokenSource ? _navigationCancellationSource ;
47+ private readonly CancellationSeries _navigationCancellation = new ( threadingContext . DisposalToken ) ;
4748
4849 public override bool ShowMouseOver => true ;
4950
5051 public void NavigateToClass ( )
5152 {
52- var cancellationToken = GetNavigationCancellationToken ( ) ;
53+ var cancellationToken = _navigationCancellation . CreateNext ( ) ;
5354 _ = NavigateToClassAsync ( cancellationToken ) . ReportNonFatalErrorUnlessCancelledAsync ( cancellationToken ) ;
5455 }
5556
@@ -78,7 +79,7 @@ await location.TryNavigateToAsync(
7879
7980 public void NavigateToSymbol ( )
8081 {
81- var cancellationToken = GetNavigationCancellationToken ( ) ;
82+ var cancellationToken = _navigationCancellation . CreateNext ( ) ;
8283 _ = NavigateToMethodAsync ( cancellationToken ) . ReportNonFatalErrorUnlessCancelledAsync ( cancellationToken ) ;
8384 }
8485
@@ -96,7 +97,7 @@ public async Task NavigateToMethodAsync(CancellationToken cancellationToken)
9697
9798 public void NavigateToFile ( )
9899 {
99- var cancellationToken = GetNavigationCancellationToken ( ) ;
100+ var cancellationToken = _navigationCancellation . CreateNext ( ) ;
100101 _ = NavigateToFileAsync ( cancellationToken ) . ReportNonFatalErrorUnlessCancelledAsync ( cancellationToken ) ;
101102 }
102103
@@ -223,20 +224,6 @@ protected override IEnumerable<Inline> CreateInlines()
223224 return _definitionCache [ symbolPart ] ;
224225 }
225226
226- private CancellationToken GetNavigationCancellationToken ( )
227- {
228- _navigationCancellationSource ? . Cancel ( ) ;
229- _navigationCancellationSource ? . Dispose ( ) ;
230-
231- if ( _threadingContext . DisposalToken . IsCancellationRequested )
232- {
233- return _threadingContext . DisposalToken ;
234- }
235-
236- _navigationCancellationSource = CancellationTokenSource . CreateLinkedTokenSource ( _threadingContext . DisposalToken ) ;
237- return _navigationCancellationSource . Token ;
238- }
239-
240227 private static ImmutableArray < StackFrameTrivia > GetLeadingTrivia ( StackFrameNode node )
241228 {
242229 if ( node . ChildCount == 0 )
0 commit comments