【发布时间】:2013-11-20 14:50:57
【问题描述】:
是否有与 TPL Parallel.Invoke 等效的 F#?到目前为止,我所遇到的只是用于显式任务控制的任务工厂,但我在分析它时遇到了问题。
【问题讨论】:
标签: f# task-parallel-library parallel-extensions
是否有与 TPL Parallel.Invoke 等效的 F#?到目前为止,我所遇到的只是用于显式任务控制的任务工厂,但我在分析它时遇到了问题。
【问题讨论】:
标签: f# task-parallel-library parallel-extensions
使用Parallel.Invoke from F# 有什么问题? F# 的最佳特性之一是您可以重用 .NET 基类库 (BCL) 中提供的所有功能。
为了简化事情,我可能会创建一个小函数来将 F# 函数数组映射到 Action 委托数组,如下所示:
/// Wraps each F# in a System.Action delegate.
let funcsAsActions (funcs : (unit -> unit)[]) : System.Action[] =
funcs |> Array.map (fun f -> System.Action f)
然后,您可以将funcsAsActions 返回的数组传递给Parallel.Invoke。
【讨论】:
funcs |> Array.Parallel.iter (fun f -> f ()) 有什么问题?映射到Actions 首先让我觉得毫无意义。
Parallel.Invoke 的问题。还有一个 overload 或 Parallel.Invoke 接受 ParallelOptions,因此您可以调整执行行为(Array.Parallel.iter 无法做到这一点)。