gpt4 book ai didi

ios - AFJSONRequestOperation - 失败时中断操作队列

转载 作者:行者123 更新时间:2023-11-29 13:11:45 25 4
gpt4 key购买 nike

我想按顺序执行一系列 AFJSONRequestOperation,并且能够在失败时中断队列。

目前我的做法并不靠谱,因为有时下一次手术会得到机会开始。

我有一个单例来调用我的 api 端点

AFJSONRequestOperation *lastOperation; // Used to add dependency
NSMutableArray *operations = [NSMutableArray array]; // Operations stack
AFAPIClient *httpClient = [AFAPIClient sharedClient];
[[httpClient operationQueue] setMaxConcurrentOperationCount:1]; // One by one

然后我以这种方式添加操作

NSMutableURLRequest *request = ...; // define request

AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request
success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {

// Takes care of success

} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
[[httpClient operationQueue] setSuspended:YES];
[[httpClient operationQueue] cancelAllOperations];
}];

[push:operation addDependency:lastOperation];
[operations $push:operation]; // This is using ConciseKit
lastOperation = operation;

// Repeat with other operations

// Enqueue a batch of operations
[httpClient enqueueBatchOfHTTPRequestOperations:operations ...

问题是,有时失败的操作之后的操作仍有机会开始。

因此,似乎具有 1 个并发操作最大值和依赖链不足以告诉队列等待失败回调完全执行之后。

执行此操作的正确方法是什么?

谢谢

最佳答案

失败回调在主线程上执行,操作(在后台线程上运行)不会等待它。因此,您需要进行一些编辑以防止下一个操作在操作及其完成 block 完成之前开始。

或者,不是在开始时将所有操作放入队列,而是将操作列表保存在数组中,并在每次成功后添加下一个操作。

关于ios - AFJSONRequestOperation - 失败时中断操作队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17131718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com