[Couroutine]Jobをキャンセルするとどのタイミングで処理は止まる?

Android でのコルーチンに関するベスト プラクティス  |  Kotlin  |  Android Developers
kotlinx.coroutines からの suspend 関数(withContext や delay など)はすべてキャンセルできます。

ここにヒントがあって、suspend関数は全て止まるのではなくwithContextやdelayじゃないと止まらない。例えば以下のようにwithContextがあって、

suspend fun test() = withContext(Dispatchers.IO){
    //処理
}

testの処理中にjobをキャンセルされるとtestの処理がすべて終わってから処理が終わる。そのため

test()
hoge()

キャンセルするとhoge()は呼ばれない。

jobがキャンセルされた後にtest()を呼んだ場合はtest処理は何も走らず、hoge()も呼ばれない。

withContextがついていない場合は処理は止まらずhoge()も呼ばれる。