public ValueTask <ImmutableArray <SerializableValueTrackedItem> > TrackValueSourceAsync(PinnedSolutionInfo solutionInfo, TextSpan selection, DocumentId documentId, CancellationToken cancellationToken) { return(RunServiceAsync(solutionInfo, async solution => { if (solution is null) { throw new InvalidOperationException(); } var document = solution.GetRequiredDocument(documentId); var progress = new ValueTrackingProgressCollector(); await ValueTracker.TrackValueSourceAsync(selection, document, progress, cancellationToken).ConfigureAwait(false); var items = progress.GetItems(); return items.SelectAsArray(item => SerializableValueTrackedItem.Dehydrate(solution, item, cancellationToken)); }, cancellationToken)); }
public ValueTask <ImmutableArray <SerializableValueTrackedItem> > TrackValueSourceAsync(PinnedSolutionInfo solutionInfo, SerializableValueTrackedItem previousTrackedItem, CancellationToken cancellationToken) { return(RunServiceAsync(solutionInfo, async solution => { if (solution is null) { throw new InvalidOperationException(); } var previousItem = await previousTrackedItem.RehydrateAsync(solution, cancellationToken).ConfigureAwait(false); if (previousItem is null) { return ImmutableArray <SerializableValueTrackedItem> .Empty; } var progress = new ValueTrackingProgressCollector(); await ValueTracker.TrackValueSourceAsync(solution, previousItem, progress, cancellationToken).ConfigureAwait(false); var items = progress.GetItems(); return items.SelectAsArray(item => SerializableValueTrackedItem.Dehydrate(solution, item, cancellationToken)); }, cancellationToken)); }