我需要执行一系列顺序运行的服务器调用,并且只有在所有先前的请求都成功后才能执行一个请求.
所以,我的想法是AFHTTPRequestOperation为每个请求创建一个并使用它[myAFHTTPClient enqueueBatchOfHTTPRequestOperations:]来解雇它们.
我可以通过调用顺序运行它们
[myAFHTTPClient.operationQueue setMaxConcurrentOperationCount:1]
但是,如果以前的操作成功,我怎样才能确保剩余的操作能够运行?
我试图为操作失败时completionBlock调用的每个操作创建一个[myAFHTTPClient cancelAllOperations],但是queueBlock和队列中的下一个操作同时运行,因此下一个请求可能在被取消之前已经发送到服务器.我该怎么办?
既然AFHTTPRequestOperations只是标准NSOperations,写了一个示例项目,并想出如何解决这个问题:
如果NSOperationQueue's maxConcurrentOperationCount设置为1,则队列中的NSOperation's completionBlock和下一个NSOperation同时运行.
但是,如果NSOperation通过调用addDependency:将每个操作链接到其先前的操作,则操作的执行将一直等到上一个操作completionBlock完成.
因此,NSOperations通过addDependency:并且在操作失败的情况下将所有链接连接在一起,取消当前操作的完成块中的剩余操作.
(另请参阅NSOperations及其completionBlocks并发运行吗?)
| 归档时间: |
|
| 查看次数: |
3012 次 |
| 最近记录: |