[Coroutine] 디퍼드(Deferred)
업데이트:
디퍼드(Deferred)
디퍼드는 결과를 갖는 비동기 잡업을 수행하기 위해 잡을 확정한다. 다른 언어에서 퓨쳐 또는 프로미스라고 하는 것의 코틀린 구현체가 디퍼드다. 기본적인 컨셉은 연산이 객체를 반환할 것이며, 객체는 비동기 작업이 완료될 때 까지 비어 있다는 것이다.
디퍼드를 만들려면 async 를 사용해야 한다.
runBlocking {
val defer = GlobalScope.async {
// Do background task here
}
defer.await()
}
또는 CompletableDeferred<>() 의 생성자를 사용 할 수 있다.
var articleTask = CompletedDeferred<List<Article>>()
예외 처리
await() 를 호출하는 부분에 try-catch 블록을 사용해 예외를 처리할 수 있다.
runBlocking {
val defer = GlobalScope.async {
TODO("Not implement yet!")
}
try {
defer.await()
} catch (t : Throwable) {
print(t.message)
}
}
Reference
코틀린 동시성 프로그래밍(에이콘)
댓글남기기