На базовом уровне Deferred
- это будущее.Это позволяет одному сопрограмму ждать результата, полученного другим, приостанавливая себя, пока не будет готов.Вызов async
- это один, но далеко не единственный способ получить Deferred
.
Однако я думаю, что ваш вопрос больше касается основ: когда использовать launch
, когдаиспользуйте async-await
.Вот важный урок: вам, вероятно, не нужен асинхронный .Люди склонны использовать его, потому что ключевые слова async
и await
знакомы с другими языками, но в Kotlin async
не является универсальным инструментом для достижения неблокирующих вызовов.
ВотОсновной рецепт того, как превратить блокирующий вызов в приостановляющий, неблокирующий:
uiScope.launch {
val ioResult = withContext(Dispatchers.IO) { blockingIOCall() }
... just use the result, you're on the GUI thread here.
}