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





评论前必须登录!
注册