关键点
小于 1 分钟
- 在
launch
协程构建器中抛出的异常是 未捕获的 异常。 async
协程构建器将异常封装在Deferred
结果对象中。- 你可以使用
try/catch
块形式的常规 Kotlin 代码来处理异常。 - 使用
async
时,如果你想处理可能的异常,请确保将await
的调用包装在try/catch
块中。 - 在父协程的上下文中添加一个
CoroutineExceptionHandler
来捕获 未捕获得 异常。 CoroutineExceptionHandler
仅在用户预计不会处理的异常上调用;在async
协程构建器或类似的构建器中注入它没有任何效果。- 当一个协程的多个子协程抛出一个异常时,一般规则是 第一个异常胜出。
- 协程提供了一种包装回调的方法,通过
suspendCancellableCoroutine
挂起函数将异步代码处理的复杂性隐藏在调用者之外,该函数包含在协程库中。 - 如果你不想将异常从子协程传播至父协程,请使用
SupervisorJob
。