cancel()
메서드는 다음과 같은 동작을 수행
Cancelling
상태를 거쳐 Cancelled
상태로 변경됨suspend fun main(): Unit = coroutineScope {
val job = launch {
repeat(1_000) { i ->
delay(200)
println("Printing $i")
}
}
delay(1100)
job.cancel()
job.join()
println("Cancelled successfully")
}
// Printing 0
// Printing 1
// Printing 2
// Printing 3
// Printing 4
// Cancelled successfully
job.cancel()
을 호출하면 코루틴에게 작업을 중단하라는 신호를 보냄CancellationException
이라는 특별한 예외가 발생함cancel
이 호출된 뒤 다음 작업을 진행하기 전에 취소 과정이 완료되기를 기다리기 위해 일반적으로 join
을 사용join
을 사용하지 않으면 race condition이 될 수 있음kotlinx.corotines
라이브러리에선 cancel
과 join
을 함께 호출할 수 있는 간편한 방법으로 cancelAndJoin
확장함수 제공
public suspend fun Job.cancelAndJoin() {
cancel()
return join()
}
잡에 딸린 수많은 코루틴을 한번에 취소할 때 자주 사용
Cancelling
상태로 바뀜