비동기

    [Coroutine 부록] 3. withContext 사용해 join, await 대체하기

    기존에 다른 코루틴에 보내진 작업의 결과를 수신하려면 다음과 같이 코드를 만들어야 했다 suspend fun main() { val deferred: Deferred = CoroutineScope(Dispatchers.IO).async { "Async Result" } val result = deferred.await() println(result) } Deferred로 결과값을 감싼 다음 await() 메서드를 통해 해당 값이 수신될 때까지 기다려야 한다. withContext를 이용한 비동기 작업 순차화 withContext를 이용하면 withContext의 두가지 특성 때문에 이러한 작업을 간단하게 만들 수 있다. withContext 블록의 마지막 줄의 값이 반환 값이 된다. withContext..

    [Coroutine] 5. suspend fun의 이해

    일시 중단 함수란 무엇인가? suspend fun으로 선언되는 일시 중단 함수는 함수 내에 일시 중단 지점을 포함할 수 있는 특별한 함수이다. 코루틴은 언제든지 일시 중단하고, 스레드를 양보할 수 있다는 것을 기억하자. 일시 중단 함수는 코루틴에서 실행되는 일시 중단 지점이 포함된 코드들을 재사용할 수 있는 코드의 집합으로 만드는 역할을 한다. 예를 들어 다음과 같은 코드를 살펴보자. fun main() = runBlocking { delay(100L) println("Hello Coroutines") delay(100L) println("Hello Coroutines") } 이 코드에서는 delay 함수와 println 함수가 반복된다. 따라서 이 코드는 다음과 같이 함수로 만들 수 있다. fun de..