diff --git a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Services/JsonRpcExtensionService.cs b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Services/JsonRpcExtensionService.cs index 08a317fc98..86398562cc 100644 --- a/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Services/JsonRpcExtensionService.cs +++ b/src/modules/cmdpal/Microsoft.CmdPal.UI.ViewModels/Services/JsonRpcExtensionService.cs @@ -254,6 +254,12 @@ public sealed partial class JsonRpcExtensionService : IExtensionService, IJsExte { RaiseProviderAdded(wrapper); } + + if (timeoutCts.IsCancellationRequested) + { + cancellationToken.ThrowIfCancellationRequested(); + return false; + } } catch (OperationCanceledException) when (!cancellationToken.IsCancellationRequested) { diff --git a/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/JsonRpcExtensionServiceReconciliationTests.cs b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/JsonRpcExtensionServiceReconciliationTests.cs index 51e05a7fd9..b98b362fc4 100644 --- a/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/JsonRpcExtensionServiceReconciliationTests.cs +++ b/src/modules/cmdpal/Tests/Microsoft.CmdPal.UI.ViewModels.UnitTests/JsonRpcExtensionServiceReconciliationTests.cs @@ -182,6 +182,20 @@ public class JsonRpcExtensionServiceReconciliationTests Assert.IsNull(manifest); } + [TestMethod] + public async Task RefreshAndAwaitProviderAsync_CallerCancellation_Throws() + { + using var service = new JsonRpcExtensionService(TaskScheduler.Default); + using var cancellationTokenSource = new CancellationTokenSource(); + cancellationTokenSource.Cancel(); + + await Assert.ThrowsExactlyAsync(() => + service.RefreshAndAwaitProviderAsync( + Path.Combine(_root, "missing"), + TimeSpan.FromSeconds(1), + cancellationTokenSource.Token)); + } + [TestMethod] public void GetExtensionDirectoryForPath_ReturnsOwningTopLevelDirectory() {