如何执行一批彼此依赖的AFNetworking请求

Tom*_*Tom 3 afnetworking

我需要执行一系列顺序运行的服务器调用,并且只有在所有先前的请求都成功后才能执行一个请求.

所以,我的想法是AFHTTPRequestOperation为每个请求创建一个并使用它[myAFHTTPClient enqueueBatchOfHTTPRequestOperations:]来解雇它们.

我可以通过调用顺序运行它们
[myAFHTTPClient.operationQueue setMaxConcurrentOperationCount:1]

但是,如果以前的操作成功,我怎样才能确保剩余的操作能够运行?

我试图为操作失败时completionBlock调用的每个操作创建一个[myAFHTTPClient cancelAllOperations],但是queueBlock和队列中的下一个操作同时运行,因此下一个请求可能在被取消之前已经发送到服务器.我该怎么办?

Tom*_*Tom 7

既然AFHTTPRequestOperations只是标准NSOperations,写了一个示例项目,并想出如何解决这个问题:

如果NSOperationQueue's maxConcurrentOperationCount设置为1,则队列中的NSOperation's completionBlock和下一个NSOperation同时运行.

但是,如果NSOperation通过调用addDependency:将每个操作链接到其先前的操作,则操作的执行将一直等到上一个操作completionBlock完成.

因此,NSOperations通过addDependency:并且在操作失败的情况下将所有链接连接在一起,取消当前操作的完成块中的剩余操作.

(另请参阅NSOperations及其completionBlocks并发运行吗?)