如何在异步工作流中使用Async.Parallel?

恩德拉克

我一直在尝试学习如何使用基于异步消息的方法。以下是我正在尝试做的简化版本。我试图MailboxProcessor在一个对象内使用一个有限状态机总体而言,与使用基于事件的方法相比,该逻辑看起来更加直接。我尝试使用时遇到问题Async.Parallel在下面的代码中,printfn "Eval %i" v语句对i1进行两次赋值,i2而不是每次赋值一次。这使我相信我没有正确使用Async.Parallel在异步工作流中是否应该使用替代方法?

type Input(v) = 

    let agent = 
        MailboxProcessor.Start(fun inbox -> 
            let rec loop() = 
                async { 
                    let! (msg : AsyncReplyChannel<int>) = inbox.Receive()
                    printfn "Eval %i" v
                    msg.Reply(v)
                    return! loop()
                }
            loop())

    member this.Eval = agent.PostAndAsyncReply(fun r -> r)

let i1 = Input(1)
let i2 = Input(2)

async { 
    let! nodeValues = [ i1; i2 ]
                      |> Seq.map(fun n -> n.Eval)
                      |> Async.Parallel
    return nodeValues
}
|> Async.RunSynchronously
毕业机器人

这是F#3.0中的错误。Async.Parallel打电话Seq.toArray两次。在F#3.1下运行您的代码,它将只打印一次。这是F#源存储库中的修复程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在流编程中使用Highland.js的parallel()实现并行化?

来自分类Dev

如何使async.parallel()的for循环工作

来自分类Dev

如何在开发/部署工作流中使用Docker?

来自分类Dev

如何在工作流本身中使用Oozie工作流配置属性?

来自分类Dev

如何使用GNU Parallel

来自分类Dev

问题与async.parallel

来自分类Dev

可以在async.parallel中使用async.waterfall吗?

来自分类Dev

在Oracle中,PARALLEL被广泛使用。PARALLEL,PARALLEL(8),PARALLEL(a,8)有什么区别?

来自分类Dev

Java 8,在流中使用.parallel会导致OOM错误

来自分类Dev

PowerShell的async.parallel吗?

来自分类Dev

如何在TFS中使用过渡工作流创建自定义字段

来自分类Dev

如何在TFS中使用过渡工作流创建自定义字段

来自分类Dev

如何在JBPM 6.2中使用活动流程实例更新工作流

来自分类Dev

GNU Parallel 停止工作

来自分类Dev

如何使用异步方法正确编写Parallel.For

来自分类Dev

使用Async.Parallel进行计划

来自分类Dev

使用async.parallel时出错

来自分类Dev

使用async.parallel时出错

来自分类Dev

如何在GNU Parallel中传递工作编号?

来自分类Dev

如何使stdout与Parallel Python兼容?

来自分类Dev

使用cython.parallel.parallel和nogil写入文件

来自分类Dev

使用GNU Parallel进行分页

来自分类Dev

使用Parallel :: ForkManager处理文件

来自分类Dev

使用GNU Parallel的Parallelise rsync

来自分类Dev

使用GNU Parallel的Python管道

来自分类Dev

在Parallel.Foreach中使用LINQ

来自分类Dev

在foreach循环中使用Parallel :: ForkManager

来自分类Dev

&&在bash脚本中使用GNU“ parallel”

来自分类Dev

在类库中使用 Parallel.ForEach