gpt4 book ai didi

swift - 我可以使用 DispatchSemaphore 来控制主队列上的线程吗?

转载 作者:行者123 更新时间:2023-11-28 09:21:40 24 4
gpt4 key购买 nike

显然,如果我处理不同的队列,我只能使用 DispatchSemaphore。但是,如果我想在同一队列(在本例中为主队列)上运行异步代码怎么办?

let s = DispatchSemaphore(value : 0)
DispatchQueue.main.async {
s.signal()
}
s.wait()

这段代码不起作用,因为异步代码也在等待,因为信号量阻塞了主队列。我可以用信号量做这个吗?还是我需要在不同的队列上运行异步代码?

附言。我知道我可以在此代码段中使用同步,而不是异步和信号量。但这只是重现异步调用的示例代码。

最佳答案

所有这些都在主线程中进行,因此永远不会调用 semaphore.signal(),因为线程将在 semaphore.wait() 上停止并且不继续了。

如果您正在尝试运行一些异步代码并让主线程等待它,请在不同的队列上运行该代码并让它在完成时向信号量发出信号,从而允许主线程继续。

关于swift - 我可以使用 DispatchSemaphore 来控制主队列上的线程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57693314/

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