2016-04-26 4 views
1

Хотелось бы ускорить сборку с использованием 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"]) 
) 

Есть ли способ запустить последовательную итерацию параллельно?

ответ

1

Самый простой вариант будет:

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"]) 
) 
Смежные вопросы