A dispatch group is a way to monitor a set of block objects for completion. (You can monitor the blocks synchronously or asynchronously depending on your needs.) Groups provide a useful synchronization mechanism for code that depends on the completion of other tasks. For more @R_667_4045@ion about using groups,see Waiting on Groups of Queued Tasks.
有两种方法可以使用组来监视任务组.第一种是使用异步回调,另一种是阻止当前队列,直到所有分组任务都完成.无论哪种方式,设置都是相同的.
我将通过一个快速示例来帮助您入门(我将在Swift中回答,但同样的方法在Objective-C中超过1-1).首先,定义您的组:
let group = dispatch_group_create()
每个要完成的异步任务输入一次组:
dispatch_group_enter(group) dispatch_group_enter(group)
运行异步任务,当您想要将每个任务标记为已完成时,请调用dispatch_group_leave:
firstAsyncTask { dispatch_group_leave(group) } secondAsyncTask { dispatch_group_leave(group) }
如上所述,当组中的所有任务都已完成时,您可以等待当前队列(将阻塞线程)或指定要异步调用的块.
等待
dispatch_group_wait(group,30 * NSEC_PER_SEC)
这将停止当前线程的执行,直到所有组任务完成,或者30秒后(以较早者为准).
如果您想删除任何时间限制:
dispatch_group_wait(group,disPATCH_TIME_FOREVER)
异步
这个有点简单,只是因为它没有那么多.您指定一个块来调用块作为第二个参数.完成所有组的任务后,将调用此块:
dispatch_group_notify(group,dispatch_get_main_queue()) { // Code goes here. }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。