mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-26 04:31:20 +00:00
vi.waitFor in the ACP abort test and the shared Swift waitUntil helper both timed out on contended runners while passing solo; polling waits return immediately when healthy, so the higher ceilings cost nothing.
25 lines
753 B
Swift
25 lines
753 B
Swift
import Foundation
|
|
|
|
struct AsyncWaitTimeoutError: Error, CustomStringConvertible {
|
|
let label: String
|
|
var description: String {
|
|
"Timeout waiting for: \(self.label)"
|
|
}
|
|
}
|
|
|
|
func waitUntil(
|
|
_ label: String,
|
|
// Polling returns as soon as the condition holds; the generous ceiling
|
|
// only matters under full-suite parallel load, where 3s flaked on CI.
|
|
timeoutSeconds: Double = 15.0,
|
|
pollMs: UInt64 = 10,
|
|
_ condition: @escaping @Sendable () async -> Bool) async throws
|
|
{
|
|
let deadline = Date().addingTimeInterval(timeoutSeconds)
|
|
while Date() < deadline {
|
|
if await condition() { return }
|
|
try await Task.sleep(nanoseconds: pollMs * 1_000_000)
|
|
}
|
|
throw AsyncWaitTimeoutError(label: label)
|
|
}
|