Что отличается от записи или не приостановитьCoroutine / резюме в функции приостановки - PullRequest
1 голос
/ 21 января 2020

Что такое функция diffrent ниже?

suspend fun doSomething1():Boolean{
  val res = longtimeFunction()
  return res
}
suspend fun doSomething2():Boolean = suspendCoroutine{ continuation->
  val res = longtimeFunction()
  continuation.resume(res)
}

1 Ответ

2 голосов
/ 21 января 2020

Нет никакой разницы, потому что вы не используете suspendCoroutine. Чтобы добиться приостановки, неблокирующего поведения, сначала вам нужен API, который не выполняет блокирующие вызовы, а вместо этого имеет метод, который запускает операцию и немедленно возвращает ее, но получает от вас callback , который будет уведомлен о результате. Например:

suspend fun doSomething2() = suspendCoroutine<Boolean> { continuation ->
    asyncLongtimeFunction(object: Callback {
        override fun onSuccess(res: Boolean) {
           continuation.resume(res)
        }
    })
}
...