withContext

최희창·2022년 8월 29일

Introduction

  • 코루틴으로 실행된 작업의 결과를 수신하는 방법은??

  • 기존에는 Deferred로 결과값을 감싼 다음 await()를 통해 해당 값이 수신될 때까지 기다려야 한다.

suspend fun main() {
	val deferred: Deferred<String> = CoroutineScope(Dispatchers.IO).async {
    	"Async Result"
    }
    
    val result = deferred.await()
    
    println(result)
}

withContext

  • withContext를 사용하면 다음과 같은 특징이 있다.
  1. withContext 블록의 마지막 줄의 값이 반환 값이 된다.
  2. withContext가 끝나기 전까지 해당 코루틴은 일시정지된다.

이렇기 때문에 withContext를 이용해 비동기 작업을 순차 코드처럼 작성할 수 있다.

suspend fun main() {
	val result: String = withContext(Dispatchers.IO) {
    	"Async Result"
    }
    
    println(result)
}
  • 순서
  1. withcontext 블록은 IO Thread의 작업이 끝날때 까지 코루틴을 일시 중단되도록 만듭니다.
    (순차 함수처럼)
  2. IO Thread의 작업이 끝나면 결과가 반환되며 이는 result에 값이 들어간다.
profile
heec.choi

0개의 댓글