比如我有3個對象:NSOperationQueue:一系列NSOperation的依賴VS(maxConcurrentOperationCount == 1)?
NSOperation *op1 = ...;
NSOperation *op2 = ...;
NSOperation *op3 = ...;
[op3 addDependency:op2];
[op2 addDependency:op1];
NSOperationQueue *queue = ...;
queue.maxConcurrentOperationCount = 1;
[queue addOperations:@[op1, op2, op3] waitUntilFinished:NO];
我可以簡單地添加在正確的順序所有操作。但是,例如,如果op2
被取消,那麼我也應該取消op3
,在這種情況下我不能完全清除隊列。
我的問題:
1)它是安全的操作,如序列與maxConcurrentOperationCount == 1
結合?
2)如果我換到op1
和op2
左右,程序實際上會做什麼? (op2
應在op1
之後執行,但隊列只能同時從操作中取出一個)
P.S.在我的應用程序中,我使用AFHTTPRequestOperation
。它的繼承層次:
AFHTTPRequestOperation
- >AFURLConnectionOperation
- >NSOperation
所以我不能簡單地採取其他的NSOperation
子類。
我同意幾乎所有的事情,但等待。 'NSBlockOperation'具有'executionBlocks'。我應該在添加檢查單獨塊時取消嗎? – Gargo 2014-11-18 19:29:35
顯然是的,即使在塊中,您也需要明確檢查操作取消。您可以在將其添加到隊列並查看會發生什麼之前取消操作來自行嘗試。 – 2014-11-18 20:53:26
如果包含塊操作的隊列被取消,那麼它甚至不會啓動。你只需要檢查isCancelled如果在塊內做一些像循環一樣慢的事情。 – malhal 2017-01-09 01:31:38