【问题标题】:Is there an F# equivalent to the TPL Parallel.Invoke?是否有与 TPL Parallel.Invoke 等效的 F#?
【发布时间】:2013-11-20 14:50:57
【问题描述】:

是否有与 TPL Parallel.Invoke 等效的 F#?到目前为止,我所遇到的只是用于显式任务控制的任务工厂,但我在分析它时遇到了问题。

【问题讨论】:

    标签: f# task-parallel-library parallel-extensions


    【解决方案1】:

    使用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 首先让我觉得毫无意义。
    • @ildjarn 该解决方案也没有任何问题。 OP 刚刚询问了有关使用Parallel.Invoke 的问题。还有一个 overloadParallel.Invoke 接受 ParallelOptions,因此您可以调整执行行为(Array.Parallel.iter 无法做到这一点)。
    • @ildjarn 你真的应该发表你的评论作为答案
    猜你喜欢
    • 2012-02-11
    • 2016-04-28
    • 2014-12-19
    • 2021-04-30
    • 2010-09-08
    • 2013-02-04
    • 2017-01-01
    • 2012-11-21
    • 2018-04-30
    相关资源
    最近更新 更多