针对不同请求的不同DispatchQueue

时间:2017-11-14 05:13:30

标签: ios afnetworking grand-central-dispatch nsurlsession nsoperationqueue

我想为不同的http requests设置不同的优先级,我希望能够立即停止/暂停某些请求,并且如果我的请求具有High优先级,则只执行其中一些请求。我打算使用不同的方法,但似乎所有这些方法现在都已弃用:

1)要使用AFHTTPRequestOperation,我可以在OperationQueue上创建不同的DispatchQueue并在那里添加操作,但在{{1}的新版本中已弃用}}

2)为不同的同步请求使用不同的DispatchQueues(使用AFNetworking)(如果我有最高优先级的操作,我可以停止一些队列,我可以立即取消操作)。但据我所知,根据Stackoverflow Question,这种方式已被弃用,因此我无法发送同步请求。

我知道有些方法可以让请求看起来像是使用信号量进行同步,但这只是一种错觉,因为所有请求都将在我无法控制的队列中执行。

有没有办法控制执行请求的NSURLConnection.sendSynchronousRequest(或DispatchQueue)?

1 个答案:

答案 0 :(得分:1)

您应该/可以使用NSURLSessionTask/URLSessionTask子类从网络中获取数据。您可以轻松地将它们封装在一个NSOperation/Operation子类中(请参阅此slide

您只需要为其添加取消支持。您可以在NSOperation documentation回复取消命令部分中找到有关取消的信息。

要使用优先级,您可以使用多种工具:

  • 要处理OperationQueue个实例之间的优先级,您可以将它们归因于不同的qualityOfService值。
  • 要处理Operation个实例之间的优先级,您可以将它们归因于不同的qualityOfServicequeuePrioritythreadPriority值。

有关这些参数的一些其他说明,请参阅 iOS应用能效指南Prioritize Work with Quality of Service Classes section