Как ждать завершения асинхронного

Я хотел бы запустить некоторый асинхронный рабочий процесс, затем дождаться его завершения, прежде чем выводить некоторые результаты, например:

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 (), но «готово» печатается до запуска асинхронных рабочих процессов.

В реальном исполнении программа выполняет некоторые операции ввода-вывода, поэтому я хочу дождаться завершения самого медленного, прежде чем продолжить.

Ответы на вопрос(2)

Ваш ответ на вопрос