gpt4 book ai didi

ios - Swift 等待异步任务

转载 作者:行者123 更新时间:2023-11-28 10:14:56 25 4
gpt4 key购买 nike

在后台线程中我们有:

defer {
cleanup()
}

loadData()

if error {
return
}

processData()

DispatchQueue.main.asyncAfter(deadline: delay) { //Delay = now + 0-2 seconds
updateUI()
}

问题是我们要确保 defer cleanUp() 代码在 updateUI() 之后运行。就目前而言,这不会发生,因为 updateUI() 运行异步。

我的想法是在那个延迟期间休眠/阻塞,而不是异步运行。这将使延迟 cleanUp()updateUI() 完成后运行。

你怎么能做到这一点?或者有更好的方法吗?

最佳答案

您可以使用信号量告诉清理任务等待 updateUI 完成:

let semaphore = DispatchSemaphore(value: 1)
defer {
semaphore.wait()
cleanup()
}

loadData()

if error {
// If we exit here, the semaphore would have never been used
// and cleanup will run immediately
return
}

processData()
semaphore.wait() // here, we claim the semaphore, making cleanup
// wait until updateUI is done
DispatchQueue.main.asyncAfter(deadline: delay) {
updateUI()
semaphore.signal()
}

关于ios - Swift 等待异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42568614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com