Как ждать завершения асинхронного
Я хотел бы запустить некоторый асинхронный рабочий процесс, затем дождаться его завершения, прежде чем выводить некоторые результаты, например:
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 (), но «готово» печатается до запуска асинхронных рабочих процессов.
В реальном исполнении программа выполняет некоторые операции ввода-вывода, поэтому я хочу дождаться завершения самого медленного, прежде чем продолжить.