[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

코틀린 동시성 프로그래밍(에이콘)

댓글남기기