kotlin-coroutines - Kotlin Coroutines Job 层次结构解释
问题描述
在阅读有关协程中的异常的有趣文章时。我遇到了包含以下图像的部分:
我试图了解父母是如何以及Job
从哪里来的?
尽管他们将文章解释为:
一个新的协程总是被分配一个新的 Job()
但是查看代码,我看到一个带有 a 的顶级范围Job
,当调用“父级”时,launch
我们用 a 覆盖它,SupervisorJob
然后是两个子级launch
,我猜它们继承父级作业或创建自己的作业。
所以,我的问题是父工作从何而来(包含 2 个子工作的那个)?
解决方案
您传递给的内容将成为内部创建launch
的作业的父级。launch
该工作始终属于同一类型,即StandaloneCoroutine
. 您无法控制Job
协程对应的实例,您只能决定其父级。
在您的图表中,Job()
内部scope
完全被忽略了。顶层launch
创建自己的StandaloneCoroutine
并将SupervisorJob
您传入的指定为其父级。
在您的图表中表示的特定情况下,SupervisorJob
它没有任何影响,因为它不会阻止任何协程故障的蔓延。如果两个内部协程中的任何一个失败,顶层launch
将被取消。launch
唯一的区别是SupervisorJob
它将保持活动状态,但此时它不会有子节点。
推荐阅读
- jquery - 使用 Blazor webassembly 在后台上传文件
- ios - iOS WKWebView 允许从本地存储附加输入文件
- mongodb - 从谷歌云存储流恢复“mongodump”备份
- java - 如何使用android中的按钮从另一个片段中打开一个片段
- javascript - 在 Javascript 中处理货币
- javascript - 在不改变状态、道具或父级的情况下反应子级渲染
- javascript - 如何通过一台 Express 服务器部署不同的 React Web 应用程序?
- python - Docker 没有保存 Scrapy 蜘蛛的输出文件
- python - 有人可以帮我理解下面的代码吗
- python - 给它空str不会退出无限期while循环