2016-05-18 33 views
0
[self.operationsQueue waitUntilAllOperationsAreFinished]; 
[self.operationsQueue cancelAllOperations]; 

這並沒有達到我想要的效果。如何取消NSOperationsQueue中的所有操作並從隊列中刪除所有操作

如何取消NSOperationsQueue中的所有操作並從隊列中刪除所有操作?

+1

對'waitUntilAllOperationsAreFinished'的調用會阻塞,直到所有操作完成。試圖在此之後取消操作是毫無意義的,因爲它們都是在那個時候完成的。 – rmaddy

+0

我不明白你的意思畢竟操作完成取消。 –

+1

在所有操作完成之前'waitUntilAllOperationsAreFinished'不會返回。當您的代碼到達您對'cancelAllOperations'的調用時,隊列中不會再有任何操作。沒有什麼可以取消的。 – rmaddy

回答

0

你不需要[self.operationsQueue waitUntilAllOperationsAreFinished]

[self.operationsQueue cancelAllOperations]只是在隊列中的所有操作上設置了isCancelled = YES,這取決於操作本身對此作出的反應。

因此,您只需在運行時定期檢查self.isCancelled

- (void)main 
{ 
    if (self.isCancelled) { 
     return; 
    } 

    // Do some work 

    if (self.isCancelled) { 
     return; 
    } 

    // Do some more work 
} 
相關問題