diff --git a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs index 4cfa83382ba..c73efd908a9 100644 --- a/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs +++ b/Flow.Launcher.Core/Plugin/JsonRPCPlugin.cs @@ -241,7 +241,7 @@ protected string Execute(ProcessStartInfo startInfo) protected async Task ExecuteAsync(ProcessStartInfo startInfo, CancellationToken token = default) { Process process = null; - bool disposed = false; + using var exitTokenSource = new CancellationTokenSource(); try { process = Process.Start(startInfo); @@ -251,6 +251,7 @@ protected async Task ExecuteAsync(ProcessStartInfo startInfo, Cancellati return Stream.Null; } + await using var source = process.StandardOutput.BaseStream; var buffer = BufferManager.GetStream(); @@ -259,7 +260,7 @@ protected async Task ExecuteAsync(ProcessStartInfo startInfo, Cancellati { // ReSharper disable once AccessToModifiedClosure // Manually Check whether disposed - if (!disposed && !process.HasExited) + if (!exitTokenSource.IsCancellationRequested && !process.HasExited) process.Kill(); }); @@ -302,8 +303,8 @@ protected async Task ExecuteAsync(ProcessStartInfo startInfo, Cancellati } finally { + exitTokenSource.Cancel(); process?.Dispose(); - disposed = true; } }