我想运行一些异步工作流程,然后等待它完成,然后再打印一些结果,例如:

let dowork n =
    async {
        do printfn "work %d" n
    }

let creatework() =
    async {
        for x in [1..5] do
            Async.Start(dowork x)
    }

Async.RunSynchronously(creatework())
printfn "finished"


运行此程序时,我希望所有的dowork调用在打印“完成”之前完成。但是我得到这样的结果:

工作2
工作3
工作4
工作5
完了
工作1

我尝试从creatework()中删除异步,但是在运行异步工作流之前会打印“完成”。

在实际的工作中,该程序执行一些IO,因此我想等待最慢的一个完成后再继续。

最佳答案

好回答我自己的问题似乎很la脚,但这似乎可行。有人想出了更好的东西,所以我可以给他们答案:)

let dowork n =
    async {
        do printfn "work %d" n
    }

let creatework() =
    [1..5] |> Seq.map dowork |> Async.Parallel |> Async.RunSynchronously

creatework()
printfn "finished"


它提供各种输出,但是到目前为止,“完成”始终是最后一个...

07-24 09:20
查看更多