我想运行一些异步工作流程,然后等待它完成,然后再打印一些结果,例如:
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"
它提供各种输出,但是到目前为止,“完成”始终是最后一个...