Adding structured concurrency to JavaScript
摘要
探索在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
探索时间: 2026-03-25