블록 내부의 모든 코루틴에 SupervisorJob()을 설정 : supervisorScope 앞선 12번글에서 SupervisorJob을 이용해 Error을 Handling하는 방법을 알았다. 하지만, 매번 CoroutineContext에 SupervisorJob을 설정할 필요 없이 특정 블록 내부의 모든 코루틴에 Supervisor Job을 설정하고 싶을 수 있다. 이 때 사용하는 것이 바로 supervisorScope이다. 과 같이 supervisorScope 내부에 코루틴이 있다면 모든 코루틴은 SupervisorJob의 적용을 받게된다. 예를들어 아래와 같은 코드가 있다고 해보자. suspend fun main() { CoroutineScope(Dispatchers.IO).launch { // ..
Coroutine Job
Job의 상태 변수 : isActive, isCancelled, isCompleted Job의 상태 변수는 세가지가 있는데 의 방식으로 접근이 가능하다. 이 상태 변수들은 다음과 같이 설명될 수 있다. isActive: Job이 실행중인지 여부를 표시 isCancelled: Job cancel이 요청되었는지 여부를 표시 isCompleted: Job의 실행이 완료되었거나 cancel이 완료었는지를 표시 자세한 상태변화를 아래 예시와 함께 알아보자. Job이 CoroutineStart.LAZY 옵션으로 생성되었을 때 상태 변화 Job을 생성됨에서 실행중 상태로 자동으로 넘기지 않기 위해 CoroutineStart.LAZY 옵션을 이용해 Job의 상태변수를 다루어보자. isActive isCancelled ..
Job의 상태 Job의 상태는 생성, 실행 중, 실행 완료, 취소 중, 취소 완료 총 5가지이다. 생성(New) : Job이 생성된다. 실행 중(Active) : Job이 실행 중이다. 실행 완료(Completed) : Job의 실행이 완료되었다. 취소 중(Cancelling) : Job이 취소되는 중이다. Job이 취소되면 리소스 반환 등의 작업을 해야 하기 때문에 취소 중 상태가 있다. 취소 완료(Cancelled) : Job의 취소가 완료되었다. 앞선 글에서 다룬 내용 : Job의 생성과 실행 앞선 글에서 우리는 Job의 생성과 실행을 다루었다. launch를 통한 Job의 생성 및 실행 launch에 CoroutineStart.LAZY 옵션을 추가하여 Job을 바로 실행되지 않게 만들기 Corou..
앞선 4번 글에서 코루틴 빌더인 launch 메서드를 사용했을 때 Job이 생성되는 것을 볼 수 있었다. Job은 결과가 없는 비동기 작업으로 예외가 발생하지 않는 이상 끝까지 수행되었었다. 이번 글에서는 Job 비동기 작업을 실행하는 시점과, 실행 방법을 조절하는 것에 대해 더욱 깊숙이 다뤄볼 것이다. Job의 생성 코루틴 빌더인 launch 메서드를 별도의 옵션 없이 사용하면 생성된 비동기 작업(Job)은 생성 후에 바로 실행된다. fun main() = runBlocking { val job = launch { println(1) } } // 1 출력 예를 들면 위와 같이 Job을 생성할 경우 이 Job은 생성과 동시에 실행된다. 이러한 방식으로 Job을 생성하면 필요한 위치에 바로 생성해서 실행시..