public async ValueTask StartTrackingAsync( Solution solution, CancellationToken cancellationToken ) { var newSession = new TrackingSession(_workspace, _spanProvider); if (Interlocked.CompareExchange(ref _session, newSession, null) != null) { newSession.EndTracking(); Contract.Fail("Can only track active statements for a single edit session."); } await newSession .TrackActiveSpansAsync(solution, cancellationToken) .ConfigureAwait(false); TrackingChanged?.Invoke(); }