fsprojects / FAKE

FAKE - F# Make
https://fake.build
Other
1.28k stars 582 forks source link

Targets defined as parallel run sequentially when they have a common dependency #2691

Open koenmetsu opened 1 year ago

koenmetsu commented 1 year ago

Hi

I'm trying to make 3 targets run in parallel, with a common first step. As soon as I add the common step, the targets don't seem to run in parallel anymore.

I added a small example script, which I run with dotnet fake run build-parallel.fsx --parallel 8.

Is this a known issue, or am I missing something here?

#r "paket:
version 7.0.2
framework: net6.0
source https://api.nuget.org/v3/index.json"

open System.Threading
open System.Threading.Tasks
open Fake.Core
open Fake.Core.TargetOperators

Target.create "Default" ignore

Target.create "PreTasks" (fun _ ->
    Thread.Sleep(5000)
    ()
)
Target.create "TaskA1" (fun _ ->
    Thread.Sleep(5000)
    ()
)
Target.create "TaskA2" (fun _ ->
    Thread.Sleep(5000)
    ()
)
Target.create "TaskA3" (fun _ ->
    Thread.Sleep(5000)
    ()
)

// ==> This runs in parallel
"TaskA1"
  ==> "Default"

"TaskA2"
  ==> "Default"

"TaskA3"
  ==> "Default"

//// ==> This runs in parallel as well
//"TaskA1" <=> "TaskA2" <=> "TaskA3"
//  ==> "Default"

//// ==> This makes it run sequentially
//"PreTasks"
//  ==> "TaskA1"
//  ==> "Default"
//
//
//"PreTasks"
//  ==> "TaskA2"
//  ==> "Default"
//
//"PreTasks"
//  ==> "TaskA3"
//  ==> "Default"
//

//// ==> This also runs sequentially
//"PreTasks"
//  ==> "TaskA1" <=> "TaskA2" <=> "TaskA3"
//  ==> "Default"

Target.runOrDefault "Default"