Simple&Natural

Coroutine - withContext 와 coroutineScope 의 비교 본문

언어/Java&Kotlin

Coroutine - withContext 와 coroutineScope 의 비교

Essense 2020. 8. 29. 06:17
728x90

withContext와 coroutineScope의 비교

두 함수 모두 suspend fun으로서 코루틴 내부에서 블록을 중단시키기 때문에 유사해 보인다.

그러나, coroutineScope는 withContext의 한 유형으로 볼 수 있다.

즉, coroutineScope는 withContext(this.coroutineContext) 와 본질적으로 같은 의미를 지닌다.

coroutineScope는 Dispatcher를 설정할 수 없다 (무조건 현재 호출한 context를 사용하기 때문이다)

 

- coroutineScope는 에러처리 등의 목적으로 특정 코드를 하나의 블럭으로 묶고 싶을 때 사용

- withContext는 해당 코드블럭을 특정 Context에서 실행하고 싶을 때 사용하는 용도 (네트워크 작업을 위한 IO Dispatcher 등)

 

하지만 coroutineScope 내에서 Exception을 Throw하면 전체 부모 루틴이 중지되는데 아래의 문구를 살펴보면 에러 핸들링 목적으로 사용한다는 말이 잘 이해가 되지 않는다.

 

1번자료

coroutineScope is meant to provide a scope for multiple parallel coroutines in which all will be canceled, if any fails.

withContext is designed to be used to switch the context (eg. the Dispatcher) for the given block of code.

 

2번자료

Yes, they should behave the same way. They are intended for different use cases though.

coroutineScope is meant to provide a scope for multiple parallel coroutines in which all will be canceled, if any fails.

withContext is designed to be used to switch the context (eg. the Dispatcher) for the given block of code.

 

 

 

[참고자료]

1. https://stackoverflow.com/questions/56858624/kotlin-coroutines-what-is-the-difference-between-coroutinescope-and-withcontext

 

 

kotlin coroutines, what is the difference between coroutineScope and withContext

withContext suspend fun withContext( context: CoroutineContext, block: suspend CoroutineScope.() -> T ): T (source) Calls the specified suspending block with a given coroutine

stackoverflow.com

 

2. https://stackoverflow.com/questions/56904057/why-does-withcontext-await-for-the-completion-of-child-coroutines

 

Why does withContext await for the completion of child coroutines

The documentation of withContext states Calls the specified suspending block with a given coroutine context, suspends until it completes, and returns the result. However, the actual behavior is...

stackoverflow.com

 

3. https://tourspace.tistory.com/154

 

[Kotlin] 코틀린 - 코루틴#5 - exception

이 글은 아래 링크의 내용을 기반으로 하여 설명합니다. https://github.com/Kotlin/kotlinx.coroutines/blob/master/coroutines-guide.md 또한 예제에서 로그 print시 println과 안드로이드의 Log.e()를 혼용합..

tourspace.tistory.com

 

728x90

'언어 > Java&Kotlin' 카테고리의 다른 글

Shuffle 구현  (0) 2020.10.30
Coroutine Async 의 동작 시점  (0) 2020.10.11
자바 메모리 관리 - 스택&힙  (0) 2020.06.25
코틀린 SAM 인터페이스의 람다식 관련  (0) 2020.04.08
Kotlin의 null처리  (0) 2020.03.20