第 48 课2026.09.08
两个调用者同时关闭资源时,只执行一次底层释放,并让双方等待同一个结果。
第 48 课:并发关闭共享同一次释放
- 日期:2026-09-08
- 课程序号:第 48 课
- 知识点:生命周期并发与 Promise 复用
用途
两个调用者同时关闭资源时,只执行一次底层释放,并让双方等待同一个结果。
核心概念
用明确类型保存进行中的 Promise<void>;并发调用复用它,避免同一资源在释放完成前被重复处理。
最小代码或操作示例
ts
class Handle {
private closing?: Promise<void>
close(): Promise<void> {
if (this.closing) {
return this.closing
}
this.closing = this.release()
return this.closing
}
private async release(): Promise<void> {
await Promise.resolve()
}
}3~5 分钟练习
连续调用两次 close(),比较两个返回值是否引用同一个 Promise。
参考答案
handle.close() === handle.close() 为 true,两次调用共享同一次释放过程。
与上一课的联系
上一课处理首次失败后的顺序重试;本课进一步约束释放尚未完成时的并发调用。