在后台处理方法中使用相同的调度队列

我有一个方法更新表中的两个部分需要一段时间。 我想做的事情如下:

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内核可用,其他数量)当前正在执行的线程等)。