协程范围可能会在异常后保持运行

时间:2019-06-04 19:15:32

标签: kotlin kotlin-coroutines

suspend fun processReferences(refs: List<Reference>) =
    coroutineScope{
        for(ref in refs){
            val location = ref.resolveLocation()
            launch{
                val content = downloadContent(location)
                processContent(ref, content)
            }
        }
    }
在上面的代码(来自Kotlin Conference 2018)中的

,如果我们从启动的协程之一中获取异常,则所有子协程将被取消,并且coroutineScope不会返回或引发异常,直到所有子协程都结束为止。但是取消是合作的,如果downloadContent不检查取消,它将终止,并且浪费时间和资源(coroutineScope必须等待所有downloadContent完成,因为它们不要检查取消。)

但是如果以旧方式使用线程而不是协程,那只会浪费资源,并且异常会很快传播,并且不会浪费时间!

coroutineScope会否有任何解决办法,比如说杀死子协程而不等待取消完成?

0 个答案:

没有答案