关键点
小于 1 分钟
- 协程的所有信息都包含在
CoroutineContext
及其CoroutineContext.Elements
中。 - 有三个主要的协程上下文元素:首先是具有生命周期定义并且可以取消的
Job
,然后是可以处理协程异常的CoroutineExceptionHandler
,最后是处理协程函数执行流程和执行线程的ContinuationInterceptor
。 - 每一个协程上下文元素都实现了
CoroutineContext
。 ContinuationInterceptors
负责线程的切换。主线程和后台线程是通过Dispatchers
提供的。- 你可以使用
+/plus
操作符组合不同的CoroutineContexts
以及它们的Elements
,从而有效的合并它们的元素。 - 一个好的实践是构建一个
CoroutineContext
提供器,因此你就不会依赖明确的上下文。 - 你可以通过
CoroutineContextProvider
提供复杂的上下文,比如:自定义的异常处理器,具有生命周期的协程或者线程机制。 CoroutineContextProvider
在测试中非常有用,因为你可以提供特定于测试环境的上下文。