()
| 47 | core.asyncInterrupt<number>((resume) => { |
| 48 | if (this.free < n) { |
| 49 | const observer = () => { |
| 50 | if (this.free < n) return |
| 51 | this.waiters.delete(observer) |
| 52 | resume(core.suspend(() => { |
| 53 | if (this.free < n) return this.take(n) |
| 54 | this.taken += n |
| 55 | return core.succeed(n) |
| 56 | })) |
| 57 | } |
| 58 | this.waiters.add(observer) |
| 59 | return core.sync(() => { |
| 60 | this.waiters.delete(observer) |