Deferred
Объект Deferred в Kotlin используется для представления отложенного значения из асинхронной операции. Он представляет собой обещание (promise) получить результат операции в будущем. Основное назначение объекта Deferred - это предоставить доступ к результату выполнения корутины.
Когда вы хотите запустить асинхронную операцию и получить результат, объект Deferred приходит на помощь. Вы можете использовать функцию async
для запуска асинхронной операции и получить объект Deferred, который представляет результат выполнения этой операции.
fun main() {
val deferred: Deferred<String> = GlobalScope.async {
delay(1000) // Имитация долгой операции
"Результат операции"
}
// Вы можете делать другие вещи здесь в то время, как операция выполняется асинхронно
runBlocking {
val result = deferred.await()
println("Результат операции: $result")
}
}
Объект Deferred позволяет вам создавать композиции асинхронных операций, когда результат одной операции используется в другой.
fun main() {
val deferred1: Deferred<Int> = GlobalScope.async {
delay(1000)
42
}
val deferred2: Deferred<String> = GlobalScope.async {
delay(500)
"The answer is ${deferred1.await()}"
}
runBlocking {
val result = deferred2.await()
println(result)
}
}
Объект Deferred предоставляет метод cancel()
, который можно использовать для отмены выполнения асинхронной операции. Однако, отмена операции не приводит к отмене самой корутины.
fun main() {
val deferred: Deferred<String> = GlobalScope.async {
try {
delay(3000)
"Результат операции"
} catch (e: CancellationException) {
"Операция отменена"
}
}
runBlocking {
delay(1000)
deferred.cancel()
val result = deferred.await()
println("Результат операции: $result")
}
}