检查入队的GCD区块?

JPC*_*JPC 7 objective-c grand-central-dispatch

假设我有一个串行调度队列,我在其上排队了几个操作.我已经读过,一旦发送,我就无法取消操作.是否有可能至少查看我发送的GCD块可能会做出决定,如果我想再派一个?

例如,我将操作A分派给队列,但在我的应用程序决定将另一个操作A排入队列之后不久,所以现在有两个这样的操作排队.

StC*_*ero 0

由于 NSOperation 现在构建在 GCD 之上,因此您现在可以使用addOperationWithBlock:将块放在 NSOperationQueue 上,然后您可以调用NSOperationQueue 上的操作来获取未完成操作的 NSArray。

这样做的问题是,这是两个以上的操作,并且不是原子的,因此您的操作完全有可能在您获取操作数组并查看它是否包含在其中之间完成。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html

然而,NSOperations 有一个先决条件 API,因此您可以将另一个操作排入队列,该操作仅在第一个 NSOperation 完成后才会运行,并使用它来跟踪何时应尝试再次将第一个 NSOperation 排入队列。

https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html#//apple_ref/doc/uid/TP40004591