在运行AFHTTPSessionManager的AFNetworking 2中设置对并发任务的限制

sha*_*ioz 15 network-programming ios afnetworking afnetworking-2 nsurlsession

所以我知道在旧的AFNetworking中使用AFHTTPClient是可能的,我知道如果我使用AFHTTPRequestOperationManager我可以设置队列的限制,但我不能让AFHTTPSessionManager一次只运行x个请求而不是我自己实现它使用成功块(我不想).

以下代码不限制我的连接:

AFHTTPSessionManager*manager = [AFHTTPSessionManager manager]; manager.operationQueue.maxConcurrentOperationCount = 1;

根据这里有趣的讨论,我向服务器提出了很多请求,并且在我获得超时之前将其阻塞,因此我确实需要限制并发连接.

我错过了什么?

Aar*_*ger 22

AFHTTPSessionManager使用任务而不是操作(NSURLSessionDataTask特别是),这就是您无法设置操作队列的原因.

正如您在此类的实现中所看到的,任务立即启动([task resume])而不会添加到任何类型的队列中.

因此,遗憾的是,没有内置的AFNetworking方法来设置使用的并发任务数量的限制AFHTTPSessionManager.

可能的选择:

  1. 使用AFHTTPRequestOperationManager替代(这是我在做什么)
  2. 构建一个NSOperation以任务作为属性的子类,并在[operation start]子类的方法中启动任务
  3. 创建Grand Central串行队列,并在此队列中创建和启动任务
  4. 如果您的请求都是同一主机,请直接访问HTTPMaximumConnectionsPerHost基础URL加载系统中的选项,如下所示:

    [NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
    
    Run Code Online (Sandbox Code Playgroud)

    这种方法有许多注意事项,Apple文档中对此进行了讨论.

如果您最终做#2,请将其作为拉动请求提交给AFNetworking - 这将是一个受欢迎的补充.