...

/

How Does Cancellation Work?

How Does Cancellation Work?

Learn how cancellation works.

We'll cover the following...

When a job is canceled, it changes its state to “Canceling.” Then, at the first suspension point, a CancellationException is thrown. We can catch this exception using a try-catch, but it’s recommended to rethrow it.

package kotlinx.coroutines.app
import kotlinx.coroutines.*

suspend fun main(): Unit = coroutineScope {
   val job = Job()
   launch(job) {
       try {
           repeat(1_000) { i ->
               delay(200)
               println("Printing $i")
           }
       } catch (e: CancellationException) {
           println(e)
           throw e
       }
   }
   delay(1100)
   job.cancelAndJoin()
   println("Canceled successfully")
   delay(1000)
}
Catching exception using try-catch

Remember that a canceled coroutine is not just stopped—it’s canceled internally using an exception. Therefore, we can freely clean up everything inside the finally block. For instance, we can use a finally block to close a file or a database connection. Since most resource-closing mechanisms rely on the finally block (for example, if we read a file using useLines), we don’t need to ...