Я хочу создать метод coroutine, возвращающий значение.
Например)
fun funA() = async(CommonPool) { return 1 } fun funB() = async(CommonPool) { return 2 } fun sum() { launch { val total = funA().await() + funB().await() } }
Если я хочу вернуть общий метод суммирования, как мне это сделать?
как,
fun sum(): Int { launch { val total = funA().await() + funB().await() } return total }
Чтобы вернуть точно Int
, вам нужно выйти из мира coroutine, и это то, что runBlocking
для:
fun sum(): Int = runBlocking { funA().await() + funB().await() }
См. Раздел Модификация блокировки и неблокирующие миры в сопроводительном руководстве и составление приостанавливающих функций для того, как это сделать, если вы хотите использовать sum
внутри сопрограмм.