2015-05-14 66 views
1

什麼是在標準F#庫中並行運行以下代碼的最輕量級和簡潔的方法?或者失敗,任何廣泛使用的附加庫?F#如何並行執行List.map

let newlist = oldlist |> List.map myComplexFunction 

我能找到的最好的是

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

我不喜歡這個,因爲它是4線長,構造了一個數組,然後我必須做回一個列表。如果我正在使用數組,那很簡單,Array.parallel,但我想保留那個可愛的Immutable列表的功能純度。我簡直不敢相信沒有其他選擇,但到目前爲止一直無法找到。 任何建議嗎?

回答

6

使用PSeq模塊:

open Microsoft.FSharp.Collections 

let newlist = 
    oldlist 
    |> PSeq.map myComplexFunction 
    |> PSeq.toList 
+0

的'PSeq'模塊現在可以在[FSharp.Collections.ParallelSeq]中找到(http://fsprojects.github.io/FSharp.Collections.ParallelSeq/) 。 –