【发布时间】:2019-08-28 13:14:09
【问题描述】:
显然,如果我处理不同的队列,我只能使用 DispatchSemaphore。但是如果我想在同一个队列(在本例中是主队列)上运行异步代码怎么办。
let s = DispatchSemaphore(value : 0)
DispatchQueue.main.async {
s.signal()
}
s.wait()
这个sn-p不起作用,因为异步代码也在等待,因为信号量阻塞了主队列。 我可以用信号量做到这一点吗?还是我需要在不同的队列上运行异步代码?
ps。我知道我可以在这个 sn-p 中使用同步,而不是异步和信号量。但这只是重现异步调用的示例代码。
【问题讨论】:
-
DispatchSemaphore的全部意义在于控制跨多个线程对资源的访问。在单线程中使用它是没有意义的。 -
@ian 如果我调用 async,我不会在不同的线程上运行该代码吗?