有人可以给我提供一个示例,说明在使用信号量时何时使用 DISPATCH_TIME_NOW 与 DISPATCH_TIME_FOREVER 吗?
2 之间有什么区别,在什么情况下我会使用一个而不是另一个?
根据文档 DISPATCH_TIME_NOW 表示立即超时。 DISPATCH_TIME_FOREVER 表示超时无限。
为什么你会想要前者,即:立即超时。
最佳答案
您可以立即超时以检查 block 是否已完成计算。同样,您可以一直等到一个 block 完成,然后再继续执行另一个 block 。
检查一组是否完成的示例如下所示。
if (dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_NOW) == 0) {
// myDispatchGroup is finished...
} else {
// myDispatchGroup is _not_ finished...
}
在永远等待时检查一个组是否完成没有意义,因为该函数将永远等待。相反,我们使用该函数来同步阻塞(在暂停或等待中阻塞,而不是在 GCD 阻塞中)直到组完成。
// Enqueue myDispatchGroup
// Wait for it to finish
dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_FOREVER);
// Do other work that depends on myDispatchGroup being completed
关于ios - 信号量 : DISPATCH_TIME_NOW vs DISPATCH_TIME_FOREVER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958459/