From e0c453c6440f7b58c6e32b8af4c91de173072456 Mon Sep 17 00:00:00 2001 From: Tuomas Hietanen Date: Tue, 28 Oct 2025 16:24:05 +0000 Subject: [PATCH] Async API for Process --- src/app/Fake.Core.Process/Process.fs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/app/Fake.Core.Process/Process.fs b/src/app/Fake.Core.Process/Process.fs index ad10d1575bb..3efc2ea857f 100644 --- a/src/app/Fake.Core.Process/Process.fs +++ b/src/app/Fake.Core.Process/Process.fs @@ -600,11 +600,25 @@ module Process = let startRawSync (processStarter: IProcessStarter) c = (startRaw processStarter c).Result - let startAndAwait (processStarter: IProcessStarter) c = + /// Async version: Starts process and awaits completion without blocking + /// Preferred over 'run' for async workflows to avoid blocking thread pool threads + let startAndAwaitAsync (processStarter: IProcessStarter) c = start processStarter c |> Async.AwaitTaskWithoutAggregate + /// Legacy: Starts process and awaits completion (blocking) + /// For backward compatibility - prefer startAndAwaitAsync in new code + let startAndAwait (processStarter: IProcessStarter) c = + startAndAwaitAsync processStarter c |> Async.RunSynchronously + + /// Async version: Starts process and runs it to completion without blocking + /// Preferred over 'run' for async workflows + let runAsync (processStarter: IProcessStarter) c = + startAndAwaitAsync processStarter c + + /// Legacy: Starts process and runs it to completion (blocking) + /// For backward compatibility - prefer runAsync in new code let run (processStarter: IProcessStarter) c = - startAndAwait processStarter c |> Async.RunSynchronously + runAsync processStarter c |> Async.RunSynchronously let defaultEnvVar = ProcStartInfoData.defaultEnvVar