Skip to content

协程的异常处理

1. 协程异常处理框架要点

  1. 全局异常处理:捕获所有协程中的未处理异常。
  2. 局部异常处理:特定协程的异常捕获和处理。
  3. 异常重试
  4. 异常日志记录

2. 协程构建器与异常的传播

  1. launch协程构建器: 用于启动不返回值的协程。当使用launch时,如果协程内部发生了异常,会自动将异常传播到外部,类似于java的Thread.uncaughtExceptionHandlerlaunch 启动的协程如果抛出未捕获的异常,协程将崩溃,异常将会被传递到应用程序的全局异常处理机制,会爆出 CoroutineExceptionHandler
  2. async 和 produce 协程构建器:用于启动期望返回结果的协程。与launch不同,asyncproduce启动的协程不会自动处理异常,而是将异常暴露给调用者。async 启动的协程会返回一个 Deferred 对象,该对象可以通过 await() 方法来获取结果。await() 方法会抛出协程中的异常,因此,调用者需要显示处理这些异常。而 produce 启动的是一个协程生产者(通过通道返回数据)。异常会通过 receive() 方法传递给调用者。

2. 协程异常的传播

被取消的协程会挂在起点抛出 CancellationException 并且会被协程的机制忽略。 协程构建器有两种形式:自动传播异常(launch:启动不返回值的协程) 或 向用户暴露异常(async 与 produce: 启动协程并期望返回结果)。当构建器用于创建一个根协程时,

Released under the MIT License.