Objective c 检查排队的GCD块?

Objective c 检查排队的GCD块?,objective-c,grand-central-dispatch,Objective C,Grand Central Dispatch,假设我有一个串行调度队列,我在它上面排队执行几个操作。我已经读到,一旦操作被分派,我就不能取消它们。是否有可能至少查看我发送的GCD块,以决定是否要发送另一个 例如,我将操作A分派到队列中,但在我的应用程序决定将另一个操作A排队后不久,因此现在有两个操作排队。正如Kevin Ballard所说,您需要详细说明您正试图做什么。您可以做的一件事是设置一个标志,如valid\uu,然后您可以通过如下操作有效地取消队列中除当前项以外的所有项: dispatch_async(queue, ^{ if

假设我有一个串行调度队列,我在它上面排队执行几个操作。我已经读到,一旦操作被分派,我就不能取消它们。是否有可能至少查看我发送的GCD块,以决定是否要发送另一个


例如,我将操作A分派到队列中,但在我的应用程序决定将另一个操作A排队后不久,因此现在有两个操作排队。

正如Kevin Ballard所说,您需要详细说明您正试图做什么。您可以做的一件事是设置一个标志,如
valid\uu
,然后您可以通过如下操作有效地取消队列中除当前项以外的所有项:

dispatch_async(queue, ^{
  if (valid_) {
    // perform your task here
  }
});
然后,每当您想“取消”队列时,只需将
valid\uu
标志设置为
NO


不过,请再次提供有关您尝试执行的操作的更多信息,我可以给您一个更好的答案。

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

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

但是,NSOperations有一个必备的API,因此您可以让另一个操作排队,该操作只有在您的第一个NSOperation完成时才会运行,并使用此API跟踪您应该在何时再次尝试让第一个NSOperation排队


你能详细说明你想做什么吗?根据您的实际目标,有许多解决方案。