首先,我知道已经有很多问题需要取消dispatch_async,我知道有人说停止运行队列。 但是没有任何关于队列中等待块的帖子。
假设我实现了类似的东西。
@property(nonatomic)dispatch_queue_t My_queue = dispatch_queue_create("something", NULL)
dispatch_async(self.My_queue, ^(void){
// LONG TASK ONE
});
dispatch_async(self.My_queue, ^(void){
// LONG TASK TWO
});
dispatch_async(self.My_queue, ^(void){
// LONG TASK THREE
});
在新线程中将有三个块的队列,一个将运行,两个将等待。如何取消那两个等待的人?
答案 0 :(得分:1)
您正在寻找的是dispatch_suspend():
通过挂起调度对象,您的应用程序可以暂时阻止执行与该对象关联的任何块。在完成呼叫时运行的任何阻止后,将发生暂停。
dispatch_suspend(self.My_queue);
这意味着队列将执行挂起块(第一个),并且不会执行下一个块。一旦你摆脱了对队列的引用,它的保留计数就会减少,一旦它变为零,队列就会被破坏,同时还有被调度的块(除非在代码的其他部分引用了块)。
作为旁注,关于编码样式,属性名称应以小写字母开头,建议遵循camelCase约定:myQueue
而不是My_queue
。