如何在 Android 中 return 生命周期感知协程作用域中的函数值?

How do I return function value in lifecycle-aware coroutine scope in Android?

fun returnValue(): Int {
    viewModelScope.launch { 
        return 1 // Something like this
    }
}

我想 return viewModelScope 中的一些值,如上所示。我不希望我的功能被暂停。我该如何实现?

你可以试试这个

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

如果returnValue()不能暂停功能,基本上只有两个选择:

  1. 将 return 类型转换为 Deferred<Int> 并让调用者稍后负责处理 return 值。正文变为:
fun returnValue(): Deferred<Int> = viewModelScope.async {
    return@async 1
}
  1. 阻塞线程直到值可用:
fun returnValue(): Int {
    return runBlocking(viewModelScope.coroutineContext) {
        return@runBlocking 1
    }
}