作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想我读过一次关于在 Grand Central Dispatch 中将 block 添加到调度队列前面的方法(这样它就不会等待其他待处理的 block )。但我在 GCD Reference 中找不到它.有谁知道这是否可能,如果可能的话如何?
最佳答案
没有公共(public) API 来“跳转”队列,也没有从队列中删除或重新排序先前入队但尚未执行的 block 。如果你只是想让一个 block 以比其他 block 更高的优先级执行,你可以将它提交到高优先级全局并发队列,但是这样做自然会失去使用特定队列提供的任何并发保证。除此之外,您必须自己实现此功能。
做到这一点的一种方法可能是在 dispatch_async
周围拥有自己的包装器,它将每个 block 包装在另一个 block 中,这将使“队列跳跃” block 有机会在每个非队列之前执行 -跳 block 。可以想象为“跳线”创建第二个串行队列,这些包装器 block 可以相应地暂停和恢复。
但一般来说,一旦提交,就无法对 GCD 队列中的 block 重新排序。
关于ios - 我如何在 GCD 中将一个 block 添加到调度队列的前面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24165346/
我是一名优秀的程序员,十分优秀!