Ответ
Код после join() у Job из collect выполнится только после завершения Flow.
Пример:
val job = launch {
flowOf(1, 2, 3).collect {
delay(1000)
println(it)
}
}
job.join()
println("Done") // Выполнится после завершения Flow
Нюансы:
- Если Flow бесконечный (например,
flow { while(true) emit(1) }), код послеjoinне выполнится - При отмене родительской корутины или самой Job,
joinвыброситCancellationException - Для холодных Flow коллекция начнется только при вызове
collect