如何立即从范围内取消Kotlin协程(返回)?

时间:2020-02-20 04:18:27

标签: android kotlin kotlin-coroutines

在下面的代码中,我想在捕获到异常时停止执行该作用域。

GlobalScope.launch() {
   try {
       someFunctionThatThrows()
   } catch (exception: Exception) {
       // log
       cancel() // this is not stopping the coroutine and moreWork() is still executed
   }
   moreWork()
}

cancel()不会立即取消协程,而是将标志isActive设置为false,这需要后续检查。

1 个答案:

答案 0 :(得分:1)

根据您启动的范围,有特殊的语法return@launchreturn@async

GlobalScope.launch() {
   try {
       someFunctionThatThrows()
   } catch (exception: Exception) {
       // log
       return@launch 
   }
   moreWork()
}

return@async也可以具有传递到其Deferred<T>值中的实际返回值。

val deferredValue = GlobalScope.async() { return@aysnc "hello world" }