2017-02-21 75 views
1

使用operation.cancel()不會取消當前操作。如果在隊列中有一個操作,它似乎取消它,但如果它正在執行,那麼它似乎不會阻止它。operation.cancel()不取消當前操作

我需要發回一些東西回到我的子類操作中的main()函數來讓它停下來嗎?

for operation in downloadQueue.operations { 
    if operation.name == opName { 
     if operation.isExecuting == true { 
      operation.cancel() 
     } 
    } 
} 

回答

5

請閱讀文檔:https://developer.apple.com/reference/foundation/operationqueue

取消操作對象離開對象在隊列中,但通知應該儘快放棄其任務的對象。對於當前正在執行的操作,這意味着操作對象的工作代碼必須檢查取消狀態,停止正在執行的操作,並將自己標記爲已完成。

基本上,您的操作代碼應檢查isCancelled並在需要時停止。例如,你可能有一個循環處理數據項目,你可以在處理每個項目之前檢查isCancelled。