| 6006 | return this.sleepMillis(Duration.toMillis(duration)) |
| 6007 | } |
| 6008 | private sleepMillis(millis: number): Effect.Effect<void> { |
| 6009 | if (millis <= 0) return yieldNow |
| 6010 | else if (!Number.isFinite(millis)) return never |
| 6011 | return callback((resume) => { |
| 6012 | const continuation = millis > MAX_TIMER_MILLIS |
| 6013 | ? this.sleepMillis(millis - MAX_TIMER_MILLIS) |
| 6014 | : void_ |
| 6015 | const handle = setTimeout(() => resume(continuation), Math.min(millis, MAX_TIMER_MILLIS)) |
| 6016 | return sync(() => clearTimeout(handle)) |
| 6017 | }) |
| 6018 | } |
| 6019 | } |
| 6020 | |
| 6021 | const nanosPerMilli = BigInt(1_000_000) |