Как я могу запустить сопрограмму из функции приостановки и использовать текущую область?(чтобы область действия не заканчивалась до тех пор, пока не закончится запущенная сопрограмма)
Я хотел бы написать что-то вроде следующего:
import kotlinx.coroutines.*
fun main() = runBlocking { // this: CoroutineScope
go()
}
suspend fun go() {
launch {
println("go!")
}
}
Но здесь есть синтаксическая ошибка: "Неразрешенная ссылка: запуск ".Кажется, launch
должен быть запущен одним из следующих способов -
GlobalScope.launch {
println("Go!")
}
Или
runBlocking {
launch {
println("Go!")
}
}
Или
withContext(Dispatchers.Default) {
launch {
println("Go!")
}
}
Или
coroutineScope {
launch {
println("Go!")
}
}
Ни одна из этих альтернатив не делает то, что мне нужно.Либо код «блокирует», а не «порождает», либо он порождается, но родительская область не будет ждать его завершения, пока не закончится сама родительская область.
Мне нужно, чтобы он «порождался» (запускался) втекущая родительская область сопрограмм и эта родительская область должны ожидать завершения порожденной сопрограммы, прежде чем она завершится.
Я ожидал, что простой launch
внутри suspend fun
будет действительным и будет использовать свою родительскую область действия.
Я использую Kotlin 1.3
и cotlinx-coroutines-core:1.0.1
.