Как вернуть значение функции в области сопрограмм с учетом жизненного цикла в Android? - PullRequest
1 голос
/ 11 марта 2020
fun returnValue(): Int {
    viewModelScope.launch { 
        return 1 // Something like this
    }
}

Я хочу вернуть некоторое значение в viewModelScope, как указано выше. Я не хочу, чтобы моя функция была приостановлена. Как мне этого добиться?

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

Если функция returnValue() не может быть приостановлена, в основном есть только два варианта:

  1. Превратить тип возвращаемого значения в Deferred<Int> и возложить на вызывающего абонента ответственность за обработку возвращаемого значения на более позднем этапе. , Тело становится:
fun returnValue(): Deferred<Int> = viewModelScope.async {
    return@async 1
}
Блокируйте поток, пока значение не станет доступным:
fun returnValue(): Int {
    return runBlocking(viewModelScope.coroutineContext) {
        return@runBlocking 1
    }
}
0 голосов
/ 11 марта 2020

Вы можете попробовать это

suspend fun returnValue(): Int {
    suspendCoroutine<Int> { cont ->
        viewModelScope.launch {
            cont.resume(1)
        }
    }
}
...