标准答案

  1. 独立 Task 必须有取消、异常读取和结束等待,不能只创建后丢弃。
  2. gather 可等待多个结果,默认的异常和 return_exceptions 行为要明确。
  3. TaskGroup 将子任务绑定到作用域,任务失败时可以取消同组任务并集中抛出异常。
  4. 部分成功场景要保存每个任务结果和错误,不能无条件让第一个错误掩盖其他结果。

题目解析

create_task 适合需要独立调度的单个任务,但 owner 必须保存引用、读取异常并在退出时取消。gather 适合组合多个结果,异常和取消语义要由调用方决定。

TaskGroup 提供结构化并发:子任务绑定作用域,一个失败可以取消同组任务并在退出时集中报告。部分成功业务不能直接套用全败语义,应保存每个结果。

取消是协作过程,收到取消后仍要等待子任务完成清理,尤其是连接、文件和临时资源。否则主任务退出后会留下后台 Task。

常见误区

  • 误区:create_task 后没有保存引用。改正:由 TaskGroup、集合或明确 owner 管理任务并读取异常。
  • 误区:return_exceptions=True 后把异常当普通结果。改正:遍历结果分类处理异常、重试和部分成功。
  • 误区:任务取消后不等待清理。改正:取消后 await 任务,并确保 finally 释放资源。

作者信息