I would like to run some async workflow, then wait for it to finish before printing some results, example:
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"
when I run this, I want all the dowork calls to finish before printing "finished". However I get results like this:
work 2 work 3 work 4 work 5 finished work 1
I have tried removing async from creatework() but "finished" is printed before the async workflows are run.
In the real dowork, the program performs some IO, so I want to wait for the slowest one to finish before continuing.
Well answering my own question seems lame, but this seems to work. Someone come up with something better so I can award them the answer :)
let dowork n =
async {
do printfn "work %d" n
}
let creatework() =
[1..5] |> Seq.map dowork |> Async.Parallel |> Async.RunSynchronously
creatework()
printfn "finished"
It gives various output, but "finished" so far is always last...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With