Kotlin - 在例外后继续Coroutine

时间:2017-01-11 01:59:46

标签: exception kotlin 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.
}

我不确定这是否可行,但请提前感谢您一起来看看!

2 个答案:

答案 0 :(得分:2)

简短的回答是,这是不可能的。更长的答案是:

Kotlin协同程序允许您仅在设计的挂起点(使用挂起函数)暂停执行代码。协同程序不是一般的goto控件构造。恰恰相反,它是一个非常受约束和严格检查的控制流概念,它确保您不会破坏代码顺序执行的错觉,尽管您可以暂停执行代码并在以后恢复它。 / p>

Kotlin协程实现一次性延续,并且一旦代码块被暂停,它就可以仅恢复一次以继续遵循常规顺序执行逻辑,例如,如果代码抛出异常,你仍然可以暂停id,但你只能恢复它继续执行它的工作(处理这个异常)。

答案 1 :(得分:-2)

对于someMethod1someMethod2someMethod3必须为suspend fun。然后你需要的只是在控制器中捕获异常并恢复协程。