F#如何并行执行List.map

时间:2015-05-14 20:32:15

标签: parallel-processing f#

在标准F#库中并行运行以下代码的最轻量级,简洁方法是什么?或者没有使用任何广泛使用的附加库?

let newlist = oldlist |> List.map myComplexFunction

我能找到的最好的是

let newlist = oldlist |> List.map (fun x -> async { return myComplexFunction x }
                      |> Async.Parallel 
                      |> Async.RunSynchronously
                      |> Array.toList

我不喜欢这样,因为它长了4行并构造了一个数组,然后我必须回到列表中。如果我正在使用Arrays,它将很简单,Array.parallel,但我想保持那个可爱的不可变列表功能纯度。我无法相信没有列表替代品,但到目前为止还找不到。 有什么好的建议吗?

2 个答案:

答案 0 :(得分:6)

使用open Microsoft.FSharp.Collections let newlist = oldlist |> PSeq.map myComplexFunction |> PSeq.toList 模块:

.gitignore

答案 1 :(得分:0)

现在值得一看 F# Core 中的 Array.Parallel

let newlist =
    oldlist
    |> Array.ofList
    |> Array.Parallel.map (fun x -> myComplexFunction x)
    |> Array.toList