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()も呼ばれる。