From 536d2bc479882e20fc13756c35347aed1dd24d3a Mon Sep 17 00:00:00 2001 From: Matt Parker <61717342+MattParkerDev@users.noreply.github.com> Date: Mon, 24 Nov 2025 23:50:48 +1000 Subject: [PATCH] use cancellationseries for editor document update --- .../Features/CodeEditor/SharpIdeCodeEdit.cs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs index 06fddb2..3228469 100644 --- a/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs +++ b/src/SharpIDE.Godot/Features/CodeEditor/SharpIdeCodeEdit.cs @@ -8,6 +8,7 @@ using Microsoft.CodeAnalysis.Rename.ConflictEngine; using Microsoft.CodeAnalysis.Shared.Extensions; using Microsoft.CodeAnalysis.Tags; using Microsoft.CodeAnalysis.Text; +using Microsoft.CodeAnalysis.Threading; using ObservableCollections; using R3; using Roslyn.Utilities; @@ -95,21 +96,19 @@ public partial class SharpIdeCodeEdit : CodeEdit SetCodeRegionTags("#region", "#endregion"); } - private CancellationTokenSource _solutionAlteredCts = new(); + private readonly CancellationSeries _solutionAlteredCancellationTokenSeries = new(); private async Task OnSolutionAltered() { using var _ = SharpIdeOtel.Source.StartActivity($"{nameof(SharpIdeCodeEdit)}.{nameof(OnSolutionAltered)}"); if (_currentFile is null) return; if (_fileDeleted) return; GD.Print($"[{_currentFile.Name}] Solution altered, updating project diagnostics for file"); - await _solutionAlteredCts.CancelAsync(); - _solutionAlteredCts = new CancellationTokenSource(); - var ct = _solutionAlteredCts.Token; - var documentSyntaxHighlighting = _roslynAnalysis.GetDocumentSyntaxHighlighting(_currentFile, ct); - var razorSyntaxHighlighting = _roslynAnalysis.GetRazorDocumentSyntaxHighlighting(_currentFile, ct); + var newCt = _solutionAlteredCancellationTokenSeries.CreateNext(); + var documentSyntaxHighlighting = _roslynAnalysis.GetDocumentSyntaxHighlighting(_currentFile, newCt); + var razorSyntaxHighlighting = _roslynAnalysis.GetRazorDocumentSyntaxHighlighting(_currentFile, newCt); await Task.WhenAll(documentSyntaxHighlighting, razorSyntaxHighlighting); await this.InvokeAsync(async () => SetSyntaxHighlightingModel(await documentSyntaxHighlighting, await razorSyntaxHighlighting)); - var documentDiagnostics = await _roslynAnalysis.GetDocumentDiagnostics(_currentFile, ct); + var documentDiagnostics = await _roslynAnalysis.GetDocumentDiagnostics(_currentFile, newCt); await this.InvokeAsync(() => SetDiagnostics(documentDiagnostics)); }