setting limit on concurrent tasks in AFNetworking 2 running AFHTTPSessionManager
afnetworking, afnetworking-2, ios, network-programming, nsurlsession
Solution
`AFHTTPSessionManager` uses tasks instead of operations (`NSURLSessionDataTask`, specifically), which is why you can't set an operation queue.
As you can see in the implementation of this class, tasks are immediately started (`[task resume]`) and not added to any sort of queue.
Consequently, and unfortunately, there is no built-into-AFNetworking way to set a limit to the number of concurrent tasks using `AFHTTPSessionManager`.
Possible alternatives:
- Use `AFHTTPRequestOperationManager` instead (this is what I'm doing)
- Build an `NSOperation` subclass that has a task as a property, and start the task in the `[operation start]` method of your subclass
- Create a Grand Central serial queue and create and start tasks in this queue
If your requests are all to the same host, directly access the `HTTPMaximumConnectionsPerHost` option in the foundation URL loading system, like so:
[NSURLSessionConfiguration defaultSessionConfiguration].HTTPMaximumConnectionsPerHost = 4;
This approach has a number of caveats, which are discussed in the Apple documentation.
If you wind up doing #2, please submit it as a pull request to AFNetworking - it would be a welcome addition.
Problem
so I know that in the old AFNetworking this was possible using the AFHTTPClient, and I know that if I use AFHTTPRequestOperationManager I can set the queue's limit, but I can't make AFHTTPSessionManager to run only x requests at a time without implementing it by myself using the success block (which I don't want to). The following code did NOT limit my connections: AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.operationQueue.maxConcurrentOperationCount = 1; In line with an interesting discussion here, I have a lot of requests to my server and I choke it until I get timeouts, so I really need to limit my concurrent connections. What am I missing?