我需要执行一系列顺序运行的服务器调用,并且只有在所有先前的请求都成功后才能执行一个请求。
所以,我的想法是为每个请求创建一个AFHTTPRequestOperation
,并使用[myAFHTTPClient enqueueBatchOfHTTPRequestOperations:]
将其解雇。
我可以通过调用
来顺序运行它们
[myAFHTTPClient.operationQueue setMaxConcurrentOperationCount:1]
但是,如何确保剩余的操作仅在先前的操作成功的情况下运行?
我尝试为操作失败时调用completionBlock
的每个操作创建[myAFHTTPClient cancelAllOperations]
,但是queueBlock和队列中的下一个操作同时运行,因此下一个请求可能已经被发送在取消之前到服务器。我该怎么办?
答案 0 :(得分:7)
由于AFHTTPRequestOperations
只是标准NSOperations
,所以编写了一个示例项目,并想出如何解决这个问题:
如果NSOperationQueue
的{{1}}设置为1,则maxConcurrentOperationCount
的{{1}}和队列中的下一个NSOperation
会同时运行。< / p>
但是,如果通过调用completionBlock
将每个NSOperation
链接到其先前的操作,则操作的执行将一直等到上一个操作的NSOperation
完成。
因此,通过addDependency:
将所有completionBlock
链接在一起,如果操作失败,则取消当前操作的完成块中的剩余操作。
(另见Do NSOperations and their completionBlocks run concurrently?)