Ios 您能否查询GCD序列队列中待处理TAK的数量?
我将接管一个客户端应用程序的所有权,该客户端应用程序由一名刚接触iOS开发的客户员工编写(后来离开了公司) 我正在尝试处理/改进它对并发性的使用。它创建了一堆不同的GCD计时器,具有不同的延迟,而且计时非常混乱 我可能会将其转换为使用GCD串行队列,因为我需要按顺序运行任务(但不是在主线程上)。我希望监视挂起的任务在队列上的深度。NSOperationQueues有一个查看挂起任务数量的工具,但我没有看到GCD串行队列的类似选项。有这样的设施吗Ios 您能否查询GCD序列队列中待处理TAK的数量?,ios,objective-c,grand-central-dispatch,Ios,Objective C,Grand Central Dispatch,我将接管一个客户端应用程序的所有权,该客户端应用程序由一名刚接触iOS开发的客户员工编写(后来离开了公司) 我正在尝试处理/改进它对并发性的使用。它创建了一堆不同的GCD计时器,具有不同的延迟,而且计时非常混乱 我可能会将其转换为使用GCD串行队列,因为我需要按顺序运行任务(但不是在主线程上)。我希望监视挂起的任务在队列上的深度。NSOperationQueues有一个查看挂起任务数量的工具,但我没有看到GCD串行队列的类似选项。有这样的设施吗 我想我可以构建一个NSOperationQueue
我想我可以构建一个NSOperationQueue,并使每个操作依赖于前一个操作,从而创建一个串行操作队列,但这需要大量的工作来简单地诊断任何时候队列中的任务数。没有公共API来查询GCD队列中的任务数。您可以自己构建一些东西,也可以使用
NSOperationQueue
。如果您想构建一些东西,您可以包装dispatch\u a/sync
以增加计数器,然后使用每个递减计数器的操作将另一个块排队,如下所示:
int64_t numTasks = 0
void counted_dispatch_async(dispatch_queue_t queue, dispatch_block_t block)
{
OSAtomicIncrement64(&numTasks);
dispatch_async(queue, ^{
block();
OSAtomicDecrement64(&numTasks);
});
}
或者您可以使用NSOperationQueue。那就是我要做的。一位智者曾经告诉我,“使用最高级别的抽象来完成工作。”投票赞成“使用最高级别的抽象来完成工作。”