Bird
Raised Fist0
Kotlinprogramming~5 mins

CancellationException behavior in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is CancellationException in Kotlin coroutines?

CancellationException is a special exception used to indicate that a coroutine was cancelled. It is not treated as a failure but as a normal way to stop coroutine execution.

Click to reveal answer
intermediate
How does CancellationException affect coroutine job completion?

When a coroutine throws CancellationException, its job is considered cancelled but not failed. This means the coroutine ends normally from the perspective of structured concurrency.

Click to reveal answer
intermediate
Why should CancellationException usually not be caught and ignored inside coroutines?

Because catching and ignoring CancellationException prevents the coroutine from properly cancelling, which can cause resource leaks or unexpected behavior.

Click to reveal answer
beginner
What happens if a coroutine throws an exception other than CancellationException?

Exceptions other than CancellationException are treated as failures, causing the coroutine's job to fail and propagate the error to its parent or handler.

Click to reveal answer
intermediate
How can you properly handle cleanup when a coroutine is cancelled?

Use try-finally blocks or invokeOnCompletion handlers to run cleanup code. The finally block will run even if CancellationException is thrown.

Click to reveal answer
What does CancellationException indicate in Kotlin coroutines?
AThe coroutine was paused
BThe coroutine failed with an error
CThe coroutine was cancelled normally
DThe coroutine completed successfully
If a coroutine throws CancellationException, what is the job's state?
ACancelled
BFailed
CCompleted successfully
DRunning
Why should you avoid catching CancellationException without rethrowing it?
AIt converts cancellation to success
BIt causes the coroutine to run twice
CIt improves performance
DIt prevents proper coroutine cancellation
Which block is guaranteed to run even if a coroutine is cancelled?
Atry
Bfinally
Ccatch
Delse
What happens if a coroutine throws an exception other than CancellationException?
AThe coroutine fails and propagates the error
BThe coroutine is cancelled normally
CThe exception is ignored
DThe coroutine restarts
Explain the role of CancellationException in Kotlin coroutines and how it differs from other exceptions.
Think about how cancellation is a normal stop, not an error.
You got /4 concepts.
    Describe best practices for handling CancellationException and cleanup in coroutines.
    Focus on how to keep cancellation working smoothly and clean up resources.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the primary purpose of CancellationException in Kotlin coroutines?
      easy
      A. To stop coroutines cleanly without treating it as an error
      B. To indicate a syntax error in coroutine code
      C. To force a coroutine to restart automatically
      D. To log coroutine execution details

      Solution

      1. Step 1: Understand coroutine cancellation

        CancellationException is used to stop coroutines without throwing an error that crashes the program.
      2. Step 2: Differentiate from errors

        Unlike other exceptions, CancellationException signals a normal cancellation, not a failure.
      3. Final Answer:

        To stop coroutines cleanly without treating it as an error -> Option A
      4. Quick Check:

        CancellationException stops coroutines cleanly [OK]
      Hint: CancellationException means clean stop, not error [OK]
      Common Mistakes:
      • Confusing it with runtime errors
      • Thinking it restarts coroutines
      • Assuming it logs info automatically
      2. Which of the following is the correct way to catch a CancellationException in Kotlin?
      easy
      A. catch (Error e) { /* handle */ }
      B. catch (Exception e) { /* handle */ }
      C. catch (Throwable e) { /* handle */ }
      D. catch (CancellationException e) { /* handle */ }

      Solution

      1. Step 1: Identify exception type

        CancellationException is a specific exception type used for coroutine cancellation.
      2. Step 2: Use specific catch block

        To handle cancellation properly, catch CancellationException explicitly.
      3. Final Answer:

        catch (CancellationException e) { /* handle */ } -> Option D
      4. Quick Check:

        Catch CancellationException explicitly [OK]
      Hint: Catch CancellationException by its own type [OK]
      Common Mistakes:
      • Catching only Exception hides cancellation
      • Using catch (Error) which is unrelated
      • Catching Throwable catches too broadly
      3. What will be the output of this Kotlin coroutine code snippet?
      import kotlinx.coroutines.*
      
      fun main() = runBlocking {
          val job = launch {
              try {
                  repeat(3) { i ->
                      println("Working $i...")
                      delay(100)
                  }
              } catch (e: CancellationException) {
                  println("Cancelled!")
              } finally {
                  println("Cleanup done.")
              }
          }
          delay(150)
          job.cancelAndJoin()
          println("Done")
      }
      medium
      A. Working 0... Working 1... Cancelled! Cleanup done. Done
      B. Working 0... Working 1... Working 2... Done
      C. Cancelled! Cleanup done. Done
      D. Working 0... Cancelled! Done

      Solution

      1. Step 1: Trace coroutine execution and cancellation

        The coroutine prints "Working 0..." and "Working 1..." with 100ms delay each, then cancellation occurs after 150ms.
      2. Step 2: Handle CancellationException and finally block

        CancellationException is caught, printing "Cancelled!" and finally block prints "Cleanup done." before main prints "Done".
      3. Final Answer:

        Working 0... Working 1... Cancelled! Cleanup done. Done -> Option A
      4. Quick Check:

        CancellationException caught, cleanup runs, then Done [OK]
      Hint: CancellationException triggers catch and finally blocks [OK]
      Common Mistakes:
      • Ignoring finally block output
      • Assuming all repeats run before cancel
      • Missing cancellation catch output
      4. Identify the problem in this Kotlin coroutine snippet that tries to handle cancellation:
      val job = launch {
          try {
              delay(1000)
          } catch (e: Exception) {
              println("Cancelled")
          }
      }
      job.cancel()
      medium
      A. The coroutine never starts because launch is missing parentheses
      B. Calling job.cancel() without join causes a deadlock
      C. It catches Exception instead of CancellationException, so cancellation is not handled properly
      D. delay(1000) cannot be cancelled

      Solution

      1. Step 1: Check exception handling

        The catch block catches Exception, which includes CancellationException but does not distinguish it from other exceptions.
      2. Step 2: Understand cancellation propagation

        To specifically handle cancellation without catching unrelated exceptions, catch CancellationException explicitly.
      3. Final Answer:

        It catches Exception instead of CancellationException, so cancellation is not handled properly -> Option C
      4. Quick Check:

        Catch CancellationException explicitly to handle cancellation [OK]
      Hint: Catch CancellationException, not just Exception [OK]
      Common Mistakes:
      • Assuming Exception catch handles cancellation
      • Thinking delay is uncancellable
      • Confusing cancel() with deadlock
      5. You want to cancel a coroutine but still perform some cleanup code without treating cancellation as an error. Which pattern correctly uses CancellationException to achieve this?
      hard
      A. Avoid catching exceptions and rely on coroutine scope cancellation only
      B. Use try-catch with catch (CancellationException) to handle cancellation and run cleanup in finally
      C. Use a global exception handler to catch all exceptions including cancellation
      D. Use try-catch with catch (Exception) and ignore finally block

      Solution

      1. Step 1: Understand cancellation handling best practice

        CancellationException should be caught explicitly to avoid treating cancellation as failure.
      2. Step 2: Use finally block for cleanup

        Cleanup code belongs in finally to ensure it runs whether coroutine completes or is cancelled.
      3. Final Answer:

        Use try-catch with catch (CancellationException) to handle cancellation and run cleanup in finally -> Option B
      4. Quick Check:

        Catch CancellationException and cleanup in finally [OK]
      Hint: Catch CancellationException and cleanup in finally block [OK]
      Common Mistakes:
      • Catching only Exception hides cancellation
      • Skipping finally block for cleanup
      • Relying on global handlers for cancellation
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard