Доступ к значениям за пределами области сопрограммы в Kotlin
Я получил этот код прямо здесь, он отлично работает. Я могу распечатать значения, которые получаю от каждого задания / сопрограмм, запускаемых в области видимости. Но проблема в том, что мне сложно использовать значения за пределами области видимости. Два задания выполняются асинхронно и возвращают список из конечной точки. Как я могу вернуть результат1 или результат2? Я пробовал использовать глобальные переменные, которые назначаются из задания, но оно возвращает null или пусто.
private val ioScope = CoroutineScope(Dispatchers.IO + Job())
fun getSomethingAsync(): String {
ioScope.launch {
val job = ArrayList<Job>()
job.add(launch {
println("Network Request 1...")
val result1 = getWhatever1() ////I want to use this value outside the scope
})
job.add(launch {
println("Network Request 2...")
val result2 = getWhatever2() //I want to use this value outside the scope
})
job.joinAll()
}
//Return result1 and result2 //help
}
1 ответ
Если вы хотите, чтобы функция ждала и завершилась, это означает, что вам нужно
getSomethingAsync()
не быть асинхронным. Сделай это
suspend
и удалить
ioScope.launch()
.
Кроме того, если вы хотите
getWhatever1()
а также
getWhatever2()
для запуска асинхронно друг с другом и ожидания их результатов используйте
async()
вместо
launch()
:
suspend fun getSomething(): String = coroutineScope {
val job1 = async {
println("Network Request 1...")
getWhatever1() ////I want to use this value outside the scope
}
val job2 = async {
println("Network Request 2...")
getWhatever2() //I want to use this value outside the scope
}
val result1 = job1.await()
val result2 = job2.await()
//Return result1 and result2 //help
}