子任务有明确的管理范围
并发活动若只被启动而没有后续管理,调用者可能先结束,后台却仍继续持有资源或产生错误。结构化并发把这类活动组织到有生命周期边界的范围中,让启动者也能说明何时等待以及怎样结束。
Python的TaskGroup提供一种具体形式:任务被加入异步上下文,退出该上下文时等待组内任务完成。这给并发执行建立了可追踪的包含关系,而不只是把很多任务引用放进一个普通列表。
参考:[1]
失败时协调其他活动
TaskGroup中的一个任务因非取消异常失败时,剩余任务会被取消,并在收尾后集中报告有关异常。这与独立启动后只等其中一个结果不同,因为失败处理还覆盖同组未完成工作的归宿。
该接口通常以ExceptionGroup等形式保留多个异常,并对KeyboardInterrupt和SystemExit作特别处理。明确这些约定,才能知道某个子任务失败时,同伴是否继续运行,以及调用者何时取得最终失败信息。
参考:[1]
管理生命周期仍需要合作
取消通常要通过任务自身的执行过程完成。若协程吞掉CancelledError,可能破坏TaskGroup内部依赖的协调;清理代码应有意识地保留正确的控制流,而不能把所有异常一律隐藏。
结构化也不自动提供并行处理器、业务事务回滚或共享数据同步。程序仍需限制负载,并为资源访问和外部副作用建立合适契约;它解决的是并发任务怎样共同开始、等待和结束这一层组织问题。