Для тех, кто пытается решить подобную проблему:
val job = scope.launch(Dispatchers.IO){
try {
//do the job
} catch (cancelException: CancellationException) {}
finally {
//close resources
}
}
Когда вызывается job.cancelAndJoin (), будет выброшено cancelException и код внутри catch и, наконец, будет выполнен.