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

ane*_*yzm 6 swift dispatchsemaphore

显然,如果我处理不同的队列,我只能使用 DispatchSemaphore。但是如果我想在同一个队列(在这种情况下是主队列)上运行异步代码怎么办。

let s = DispatchSemaphore(value : 0)
DispatchQueue.main.async {
   s.signal()
}
s.wait()
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

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

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