在后台处理方法中使用相同的调度队列
我有一个方法更新表中的两个部分需要一段时间。 我想做的事情如下:
dispatch_queue_t lowQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0); dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_async(lowQueue, ^{ NSArray *tempArray = // do long running task to get the data dispatch_async(mainQueue, ^{ // update the main thread [self.activityIndicatorView stopAnimating]; [self.reportsTableView reloadData]; }); }); dispatch_async(lowQueue, ^{ NSArray *tempArray2 = // same thing, do another long task // similarly, update the main thread
如果我在同一个方法中使用相同的lowQueue,那可以吗? 谢谢。
是的,您可以在同一方法中使用lowQueue
。 当您获取DISPATCH_QUEUE_PRIORITY_LOW
全局队列并在lowQueue
存储对它的lowQueue
,您可以继续使用多个dispatch_async
GCD调用将其他块排入其中。 每次调用dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0)
,都会返回对完全相同的调度队列的引用。
由于所有全局调度队列都是并发队列,因此两个任务中的每个块都将同时出列并执行,前提是GCD确定这对系统在运行时最有效(给定系统负载,CPU内核可用,其他数量)当前正在执行的线程等)。