除了文档我几乎没有办法判断一个外部库我是否需要使用 with_task_group, 如果我不熟悉一个库那我就没法上手使用异步实践, 只能任由消息串连在一起. 而且这样使用异步的体验代码量比 all/any 更多, 阅读更加困难 (这段代码到底在等什么, 这里的 with_task_group 到底是不是瞎写的), 而且 vibe 的时候幻觉更多 (llm: 这里执行缓慢, 我只要加个 with_task_group 就好了嘻嘻)
1 个赞
关于外部库的 API:这恰恰是 with_task_group 这套结构化并发的优点:由于 with_task_group 的性质,只要一个 API 没有显式接受 TaskGroup 参数,它里面 spawn 的所有 task 就一定会在它返回前结束。也就是说,没有 TaskGroup 参数的 API,全部都可以当成 blocking 来处理,连文档都不需要看。
关于阅读和编写:这个确实需要熟悉 with_task_group 的语义。不过 with_task_group 只是整套系统里最底层的原语。虽然 with_task_group 可以拿来干几乎所有事情,但 moonbitlang/async 里也提供了 with_timeout、all、any 这种基于 with_task_group 的组合子。
1 个赞