我可以异步运行Seq.iter的动作功能吗?

时间:2011-04-01 20:55:58

标签: .net asynchronous f# parallel-processing

所以,标题描述了这一切。

Seq.iter (fun item -> (*do something*)) sequence

我可以将所有lambda函数作为并行运行吗?当这个函数做了一些大的工作时,它会很有用。

3 个答案:

答案 0 :(得分:6)

当然,如果您的目标是.NET 3.5 +,那么

  1. 下载F# PowerPack
  2. 添加对FSharp.PowerPack.Parallel.Seq
  3. 的引用
  4. 打开Microsoft.FSharp.Collections
  5. 使用PSeq模块代码离开,例如{1..100} |> PSeq.iter (printfn "%A")
  6. 如果您的目标是.NET 2.0,请按照我的说明here将Rx项目中的System.Linq.ParallelEnumerable的后端版本编译到PowerPack Parallel.Seq项目中。

答案 1 :(得分:1)

如果要并行运行该功能,只需使用Parallel.ForEach功能

Parallel.ForEach(sequence, fun item -> (* do something *))

这可以从F#

中正常工作

答案 2 :(得分:0)

您可以使用Parallel.ForEachSeq.iter不应该用于那个目的。看那个

Seq.iter (fun n -> printfn "%i" (nth_prime_number n)) { 10 .. 1 }

期待是

29
23
19
17
13
11
7
5
3
2

你得到任何东西。例如

29
19
23
11
17
13
7
3
2
5