您可以查询 GCD 串行队列以获取待处理任务的数量吗?

Can you query a GCD serial queue for the number of pending taks?

我正在接管客户应用程序的所有权,该应用程序由一位刚接触 iOS 开发(并已离开公司)的客户员工编写

我正在尝试获取句柄 on/improve 它是并发的使用。它正在创建一堆具有不同延迟的不同 GCD 计时器,并且计时很乱。

我可能会将其转换为使用 GCD 串行队列,因为我需要任务 运行 按顺序排列(但不在主线程上。)我想监控待处理任务在队列中的深度。 NSOperationQueues 有一个查看挂起任务数量的工具,但我没有看到 GCD 串行队列的类似选项。有这样的设施吗?

我想我可以构建一个 NSOperationQueue,并使每个操作都依赖于前一个操作,从而创建一个串行操作队列,但是仅仅诊断队列中的任务数量就需要大量工作一次。

没有public API查询一个GCD队列的任务数。您可以自己构建一些东西,也可以使用 NSOperationQueue。如果你想构建一些东西,你可以包装 dispatch_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。那就是我要做的。一位智者曾经告诉我,"Use the highest level abstraction that gets the job done."