我想为不同的http requests
设置不同的优先级,我希望能够立即停止/暂停某些请求,并且如果我的请求具有High
优先级,则只执行其中一些请求。我打算使用不同的方法,但似乎所有这些方法现在都已弃用:
1)要使用AFHTTPRequestOperation
,我可以在OperationQueue
上创建不同的DispatchQueue
并在那里添加操作,但在{{1}的新版本中已弃用}}
2)为不同的同步请求使用不同的DispatchQueues(使用AFNetworking
)(如果我有最高优先级的操作,我可以停止一些队列,我可以立即取消操作)。但据我所知,根据Stackoverflow Question,这种方式已被弃用,因此我无法发送同步请求。
我知道有些方法可以让请求看起来像是使用信号量进行同步,但这只是一种错觉,因为所有请求都将在我无法控制的队列中执行。
有没有办法控制执行请求的NSURLConnection.sendSynchronousRequest
(或DispatchQueue
)?
答案 0 :(得分:1)
您应该/可以使用NSURLSessionTask/URLSessionTask
子类从网络中获取数据。您可以轻松地将它们封装在一个NSOperation/Operation
子类中(请参阅此slide。
您只需要为其添加取消支持。您可以在NSOperation documentation的回复取消命令部分中找到有关取消的信息。
要使用优先级,您可以使用多种工具:
OperationQueue
个实例之间的优先级,您可以将它们归因于不同的qualityOfService
值。Operation
个实例之间的优先级,您可以将它们归因于不同的qualityOfService
,queuePriority
或threadPriority
值。 有关这些参数的一些其他说明,请参阅 iOS应用能效指南的Prioritize Work with Quality of Service Classes section。