在下面的代码中,我想在捕获到异常时停止执行该作用域。
GlobalScope.launch() {
try {
someFunctionThatThrows()
} catch (exception: Exception) {
// log
cancel() // this is not stopping the coroutine and moreWork() is still executed
}
moreWork()
}
cancel()
不会立即取消协程,而是将标志isActive
设置为false,这需要后续检查。
答案 0 :(得分:1)
根据您启动的范围,有特殊的语法return@launch
,return@async
等
GlobalScope.launch() {
try {
someFunctionThatThrows()
} catch (exception: Exception) {
// log
return@launch
}
moreWork()
}
return@async
也可以具有传递到其Deferred<T>
值中的实际返回值。
val deferredValue = GlobalScope.async() { return@aysnc "hello world" }