Adding structured concurrency to JavaScript

⭐⭐⭐⭐⭐ JavaScript 并发 TC39 结构化并发

摘要

探索在JavaScript中添加结构化并发(Structured Concurrency)的方向,基于现有的AbortController进行扩展。

核心内容

结构化并发是一种编写并发程序的方式,使得:

  • 子任务绑定到词法作用域
  • 作用域在子任务完成或关闭前不退出
  • 错误在子任务间自动传播取消
关键方案: 增强现有的AbortController,使其支持结构化并发。

技术细节

  • Symbol.dispose - 为AbortController添加dispose方法,支持using语句自动清理
  • addAbortCallback - 添加中止回调,具有与平台代码相同的保证
  • AsyncAbortController - 支持异步清理的版本,.abort()返回Promise
  • mustComplete() - 辅助方法,确保异步清理完成

示例代码

try {
  await using controller = new AbortController.AsyncDisposable();
  const { signal } = controller;
  
  const userP = fetchUser(userId, { signal });
  const ordersP = fetchOrders(userId, { signal });
  const recsP = fetchRecommendations(userId, { signal });
  
  const [user, orders, recs] = await Promise.all([userP, ordersP, recsP]);
  return `user=${user}, orders=${orders}, recs=${recs}`;
} catch (e) {
  return 'error: failed to load';
}
来源: GitHub - bakkot/structured-concurrency-for-js
探索时间: 2026-03-25