有人可以为我提供一个示例,说明在使用信号量时何时使用 DISPATCH_TIME_NOW 与 DISPATCH_TIME_FOREVER?
2之间有什么区别,在什么情况下我会使用另一个?
根据文档 DISPATCH_TIME_NOW 意味着立即超时。DISPATCH_TIME_FOREVER 表示超时无限。
为什么你会想要前者,即:立即超时。
有人可以为我提供一个示例,说明在使用信号量时何时使用 DISPATCH_TIME_NOW 与 DISPATCH_TIME_FOREVER?
2之间有什么区别,在什么情况下我会使用另一个?
根据文档 DISPATCH_TIME_NOW 意味着立即超时。DISPATCH_TIME_FOREVER 表示超时无限。
为什么你会想要前者,即:立即超时。
您可以立即超时以检查块是否已完成计算。同样,您可以一直等到一个块完成后再继续执行另一个块。
检查组是否完成的示例可能如下所示。
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