我的问题
有可能在异常之后继续执行coroutine吗?
示例
try {
someMethod1()
someMethod2() //Throws an exception!
someMethod3()
} catch(e: Exception) {
//I do not want to call someMethod3 here!
//I want the coroutine to resume after the exception inside of the original block.
} finally {
//I also do not want to call someMethod3 here!
//I want the coroutine to resume after the exception inside of the original block.
}我不知道这是否可能,但谢谢你提前看一看!
发布于 2017-05-04 13:48:07
简单地说,这是不可能的。较长的答案是:
Kotlin协同器允许您仅在设计的挂起点(使用挂起函数)挂起代码执行。Coroutines不是一般的goto类控制结构。恰恰相反,这是一个非常严格约束和严格控制流的概念,它确保您不会打破连续执行代码的错觉,尽管您可以暂停执行代码并在稍后继续执行。
Kotlin协同器实现了一次中断,一旦代码块被挂起,它只能恢复一次,以便继续遵循它的常规顺序执行逻辑,例如,如果代码抛出一个异常,您仍然可以挂起id,但您只能继续执行它正在执行的操作(处理此异常)。
发布于 2017-01-11 12:19:19
对于someMethod1,someMethod2和someMethod3必须是suspend fun。然后,您所需要的就是捕获控制器中的异常并恢复协同线。
https://stackoverflow.com/questions/41581548
复制相似问题