diff --git a/src/PowerShellEditorServices/Services/PowerShell/Console/ConsoleReadLine.cs b/src/PowerShellEditorServices/Services/PowerShell/Console/ConsoleReadLine.cs index d1452e7ed..55174610c 100644 --- a/src/PowerShellEditorServices/Services/PowerShell/Console/ConsoleReadLine.cs +++ b/src/PowerShellEditorServices/Services/PowerShell/Console/ConsoleReadLine.cs @@ -49,7 +49,7 @@ public bool TryOverrideReadKey(Func readKeyFunc) return true; } - public bool TryOverrideIdleHandler(Action idleHandler) + public bool TryOverrideIdleHandler(Action idleHandler) { _psrlProxy.OverrideIdleHandler(idleHandler); return true; diff --git a/src/PowerShellEditorServices/Services/PowerShell/Console/IReadLine.cs b/src/PowerShellEditorServices/Services/PowerShell/Console/IReadLine.cs index c8c05b73b..3bb0bede8 100644 --- a/src/PowerShellEditorServices/Services/PowerShell/Console/IReadLine.cs +++ b/src/PowerShellEditorServices/Services/PowerShell/Console/IReadLine.cs @@ -15,6 +15,6 @@ internal interface IReadLine bool TryOverrideReadKey(Func readKeyOverride); - bool TryOverrideIdleHandler(Action idleHandler); + bool TryOverrideIdleHandler(Action idleHandler); } } diff --git a/src/PowerShellEditorServices/Services/PowerShell/Console/PSReadLineProxy.cs b/src/PowerShellEditorServices/Services/PowerShell/Console/PSReadLineProxy.cs index 7633435ac..a9b95b031 100644 --- a/src/PowerShellEditorServices/Services/PowerShell/Console/PSReadLineProxy.cs +++ b/src/PowerShellEditorServices/Services/PowerShell/Console/PSReadLineProxy.cs @@ -168,7 +168,7 @@ internal void OverrideReadKey(Func readKeyFunc) _readKeyOverrideField.SetValue(null, readKeyFunc); } - internal void OverrideIdleHandler(Action idleAction) + internal void OverrideIdleHandler(Action idleAction) { _handleIdleOverrideField.SetValue(null, idleAction); } diff --git a/src/PowerShellEditorServices/Services/PowerShell/Host/PsesInternalHost.cs b/src/PowerShellEditorServices/Services/PowerShell/Host/PsesInternalHost.cs index 50db143b1..5893b690a 100644 --- a/src/PowerShellEditorServices/Services/PowerShell/Host/PsesInternalHost.cs +++ b/src/PowerShellEditorServices/Services/PowerShell/Host/PsesInternalHost.cs @@ -616,7 +616,7 @@ private static PowerShell CreatePowerShellForRunspace(Runspace runspace) return pwsh; } - public (PowerShell, EngineIntrinsics) CreateInitialPowerShell( + private (PowerShell, EngineIntrinsics) CreateInitialPowerShell( HostStartupInfo hostStartupInfo, ReadLineProvider readLineProvider) { @@ -669,7 +669,7 @@ private Runspace CreateInitialRunspace(InitialSessionState initialSessionState) return runspace; } - private void OnPowerShellIdle() + private void OnPowerShellIdle(CancellationToken idleCancellationToken) { IReadOnlyList eventSubscribers = _mainRunspaceEngineIntrinsics.Events.Subscribers; @@ -696,7 +696,7 @@ private void OnPowerShellIdle() return; } - using (CancellationScope cancellationScope = _cancellationContext.EnterScope(isIdleScope: true)) + using (CancellationScope cancellationScope = _cancellationContext.EnterScope(isIdleScope: true, idleCancellationToken)) { while (!cancellationScope.CancellationToken.IsCancellationRequested && _taskQueue.TryTake(out ISynchronousTask task)) diff --git a/src/PowerShellEditorServices/Services/PowerShell/Utility/CancellationContext.cs b/src/PowerShellEditorServices/Services/PowerShell/Utility/CancellationContext.cs index b9e33fe49..8503b2065 100644 --- a/src/PowerShellEditorServices/Services/PowerShell/Utility/CancellationContext.cs +++ b/src/PowerShellEditorServices/Services/PowerShell/Utility/CancellationContext.cs @@ -33,15 +33,17 @@ public CancellationContext() _cancellationSourceStack = new ConcurrentStack(); } - public CancellationScope EnterScope(bool isIdleScope) + public CancellationScope EnterScope(bool isIdleScope, CancellationToken cancellationToken) { CancellationTokenSource newScopeCancellationSource = _cancellationSourceStack.TryPeek(out CancellationScope parentScope) - ? CancellationTokenSource.CreateLinkedTokenSource(parentScope.CancellationToken) - : new CancellationTokenSource(); + ? CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, parentScope.CancellationToken) + : CancellationTokenSource.CreateLinkedTokenSource(cancellationToken); return EnterScope(isIdleScope, newScopeCancellationSource); } + public CancellationScope EnterScope(bool isIdleScope) => EnterScope(isIdleScope, CancellationToken.None); + public void CancelCurrentTask() { if (_cancellationSourceStack.TryPeek(out CancellationScope currentCancellationSource))