ios - 信号量 : DISPATCH_TIME_NOW vs DISPATCH_TIME_FOREVER

标签 ios grand-central-dispatch

有人可以给我提供一个示例,说明在使用信号量时何时使用 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/

相关文章:

ios - 大量同步动画的设计模式

ios - 无法使用带有 GCD 的 NSURLConnection 获取数据

iOS 停止全局队列运行

ios - dispatch_async 和帧率

ios - 如何同时处理三个请求正确创建并发队列

ios - 为什么我们不应该直接使用默认的QoS?

android - IAP 的 Libgdx robovm ios 绑定(bind)

ios - 如何在swift中对多维数组进行排序?

ios - 如何在 Apple 的 TestFlight 服务上重新发送外部测试员邀请

iphone - - (CGRect)textRectForBounds :(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines