룬아님의 취중코딩

Java Callback을 Coroutine으로 변환하기 본문

개발/안드로이드 개발

Java Callback을 Coroutine으로 변환하기

룬아님 2021. 8. 9. 21:08

suspendCoroutine이 코루틴 내에서 호출될 때 컨티뉴에이션의 인스턴스가 코루틴의 상태를 캡쳐하고 지정된 블록에 인자로 전달됩니다. 코루틴을 다시 실행하려면 블록은 해당 쓰레드나 다른 쓰레드에서 resumeWith()를 직접 호출하거나 resume() 또는 resumeWithException()을 호출해야 합니다.

이를 이용하여 아래의 코드와 같이 Callback을 사용하는 함수를 suspend 함수로 변환해줍니다.

class TestImpl {
    suspend fun test(): Something = suspendCoroutine {
        somethingService.getCallback() { response: Something ->
            it.resume(response)
        }
    }
}

 

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.coroutines/suspend-coroutine.html

 

suspendCoroutine - Kotlin Programming Language

 

kotlinlang.org

 

반응형
Comments