我的问题
是否可以在异常后继续执行协程?
示例
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.
}
我不确定这是否可行,但请提前感谢您一起来看看!
答案 0 :(得分:2)
简短的回答是,这是不可能的。更长的答案是:
Kotlin协同程序允许您仅在设计的挂起点(使用挂起函数)暂停执行代码。协同程序不是一般的goto控件构造。恰恰相反,它是一个非常受约束和严格检查的控制流概念,它确保您不会破坏代码顺序执行的错觉,尽管您可以暂停执行代码并在以后恢复它。 / p>
Kotlin协程实现一次性延续,并且一旦代码块被暂停,它就可以仅恢复一次以继续遵循常规顺序执行逻辑,例如,如果代码抛出异常,你仍然可以暂停id,但你只能恢复它继续执行它的工作(处理这个异常)。
答案 1 :(得分:-2)
对于someMethod1
,someMethod2
和someMethod3
必须为suspend fun
。然后你需要的只是在控制器中捕获异常并恢复协程。