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

时间:2012-07-10 16:40:23

标签: afnetworking

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

所以,我的想法是为每个请求创建一个AFHTTPRequestOperation,并使用[myAFHTTPClient enqueueBatchOfHTTPRequestOperations:]将其解雇。

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

但是,如何确保剩余的操作仅在先前的操作成功的情况下运行?

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

1 个答案:

答案 0 :(得分:7)

由于AFHTTPRequestOperations只是标准NSOperations,所以编写了一个示例项目,并想出如何解决这个问题:

如果NSOperationQueue的{​​{1}}设置为1,则maxConcurrentOperationCount的{​​{1}}和队列中的下一个NSOperation会同时运行。< / p>

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

因此,通过addDependency:将所有completionBlock链接在一起,如果操作失败,则取消当前操作的完成块中的剩余操作。

(另见Do NSOperations and their completionBlocks run concurrently?