运行 Fake 并行任务序列

Run task sequence in parallel in Fake

想使用 FAKE 加速构建。理论上,如果我可以 运行 一个并行构建序列(在一个目标内),应该会使其更快。

let buildProject outputDir buildTargets projectName = 
    let setParams p =
        { p with
            Verbosity = Some(Quiet)
            Targets = buildTargets
            Properties =
                [   "DevEnvDir", "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools"
                    "OutputPath", outputDir
                    "Optimize", "True"
                    "DebugSymbols", "True"
                    "Configuration", buildMode ]
            }
    build setParams projectName |> DoNothing

Target "BuildLibs" (fun _ -> 
    !! "**/*.csproj"
    -- "**/*.Tests.csproj"
    //A way to run in parallel??
    |> Seq.iter (buildProject buildOutDir ["ReBuild"])
)

有没有办法运行并行序列迭代?

最简单的选择是:

Target "BuildLibs" (fun _ -> 
    !! "**/*.csproj"
    -- "**/*.Tests.csproj"
    |> Seq.ToArray
    |> Array.Parallel.iter (buildProject buildOutDir ["ReBuild"])
)

另一种选择是“F# Parallel Sequences”组件。

#r "./PATHTOLIB/lib/net40/FSharp.Collections.ParallelSeq.dll"
open FSharp.Collections.ParallelSeq

Target "BuildLibs" (fun _ -> 
    !! "**/*.csproj"
    -- "**/*.Tests.csproj"
    |> PSeq.iter (buildProject buildOutDir ["ReBuild"])
)