尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

第090篇 结构化并发与作用域:生命周期安全的根基

第090篇 结构化并发与作用域:生命周期安全的根基 结构化并发是协程相比回调的根本优势,也是最能体现"你真的理解了协程"的一题。它回答的是三个问题:任务属于谁(作用域树)、失败怎么办(异常传播规则)、什么时候结束(取消与 join)。面试常要求现场手写一个"并发执行多个任务、任一失败则整体取消"的例子,写不出来就说明只会用 API。先把结论放在前面:结构化并发的三条规则——①作用域树:launch/async创建的协程是当前作用域的子节点,父结束(完成或取消)则子节点逐个取消;②异常传播:子协程抛出的异常会取消父协程,进而取消所有兄弟;async的异常被包装在Deferred里,await()时才抛出;③取消是协作式的:只有挂起点(delay、await、挂起函数)会响应取消,阻塞代码不会。所以coroutineScope { }等所有子协程结束才返回,supervisorScope { }则子协程失败不影响兄弟。机制拆解看coroutineScope与supervisorScope的差别最直观。coroutineScope内部任意子协程失败 → 立刻取消作用域内所有其他子协程
返回列表