Я запускаю сопрограмму и хочу, чтобы она закончилась, прежде чем я возобновлю выполнение основного потока.
Мой упрощенный код выглядит так:
fun hello() {
for (i in 0..100) {
println("hello")
}
}
fun main(args: Array<String>) {
val job = GlobalScope.launch { hello() } //launch parallel
GlobalScope.launch { job.join() } //try to wait for job to finish
print("done")
}
Проблема в том, что job.join()
должен находиться в сопрограмме, основная строка выполнения откладывается до "выполнено", поэтому вывод выглядит следующим образом:
donehello
hello
hello
hello
Я хочу дождаться завершения задания, например, используя sync.WaitGroup
в Go. Поэтому мой вывод будет выглядеть детерминистически так:
hello
hello
hello
hello
...
done
Как мне это сделать?