You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CoroutineScope(Dispatchers.IO + Job())与CoroutineScope(Dispatchers.IO)+Job()的差异

两种CoroutineScope创建方式的区别

这两种写法最终功能完全等价,仅执行流程略有不同,本质上都会得到持有Dispatchers.IO + Job()上下文的CoroutineScope:

执行流程差异

  • 第一种写法:

    val scope1 = CoroutineScope(Dispatchers.IO + Job()) 
    

    先将Dispatchers.IO调度器和新建的Job()合并为完整的CoroutineContext,再直接用该上下文初始化CoroutineScope。

  • 第二种写法:

    val scope2 = CoroutineScope(Dispatchers.IO) + Job()
    
    1. 先以Dispatchers.IO为上下文创建CoroutineScope(此时该scope的上下文仅包含调度器,无Job);
    2. 调用CoroutineScope的plus扩展方法,将原scope的上下文与新建的Job()合并,返回持有合并后上下文的新CoroutineScope。

核心结论

CoroutineScope.plus方法的内部实现就是基于原上下文与传入上下文创建新的CoroutineScope,因此两种写法最终得到的scope完全一致,不存在功能差异,只是代码执行顺序不同——第一种先合并上下文再创建scope,第二种先创建基础scope再合并上下文。

内容的提问来源于stack exchange,提问作者Nguyễn Mạnh Cường

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 23:51:01