异步等待闭包中是否需要使用自旋锁?
示例代码:
func someFunction(completion: @escaping () -> Void) { DispatchQueue.global().async { // some long-running task
DispatchQueue.main.async {
completion()
}
}
}
// 异步等待闭包 func someOtherFunction() async { await withCheckedContinuation { continuation in someFunction { // closure 完成时继续 continuation.resume() } } }
// 或者使用自旋锁 func someOtherFunctionUsingSpinLock() { let lock = NSLock() var done = false
someFunction {
lock.lock()
defer { lock.unlock() }
done = true
}
while !done {
lock.lock()
lock.unlock()
}
}