所以我知道在旧的AFNetworking中使用AFHTTPClient是可能的,我知道如果我使用AFHTTPRequestOperationManager我可以设置队列的限制,但我不能让AFHTTPSessionManager一次只运行x个请求而不是我自己实现它使用成功块(我不想).
以下代码不限制我的连接:
AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; manager.operationQueue.maxConcurrentOperationCount = 1;
根据这里有趣的讨论,我向服务器提出了很多请求,并且在我获得超时之前将其阻塞,因此我确实需要限制并发连接.
我错过了什么?
AFHTTPSessionManager
使用任务而不是操作(NSURLSessionDataTask
特别是),这就是您无法设置操作队列的原因.
正如您在此类的实现中所看到的,任务立即启动([task resume]
)而不会添加到任何类型的队列中.
因此,遗憾的是,没有内置的AFNetworking方法来设置使用的并发任务数量的限制AFHTTPSessionManager
.
可能的选择:
使用AFHTTPRequestOperationManager
替代(这是我在做什么)
构建一个NSOperation
以任务作为属性的子类,并在[operation start]
子类的方法中启动任务
创建Grand Central串行队列,并在此队列中创建和启动任务
如果您的请求都是同一主机,请直接访问HTTPMaximumConnectionsPerHost
基础URL加载系统中的选项,如下所示:
[NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
这种方法有许多注意事项,Apple文档中对此进行了讨论.
如果您最终做#2,请将其作为拉动请求提交给AFNetworking - 这将是一个受欢迎的补充.