不同的请求有不同的 DispatchQueue

Different DispatchQueue for different requests

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

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

2) 为不同的 Synchronous 请求使用具有不同优先级的不同 DispatchQueues(使用 NSURLConnection.sendSynchronousRequest)(这样我可以停止一些队列,如果我有最高优先级的操作和我可以立即取消操作)。但据我了解 ,这种方式已被弃用,所以我无法发送同步请求。

我知道在某些情况下,请求似乎是使用信号量同步的,但这只是一种错觉,因为所有请求都将在我无法控制的队列中执行。

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

您 should/could 使用 NSURLSessionTask/URLSessionTask 子类从网络中获取数据。您可以轻松地将它们封装在一个 NSOperation/Operation 子类中(参见 slide.

您只需要为其添加取消支持。您可以在 NSOperation documentation.

响应取消命令 部分中找到有关取消的信息

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

  • 要处理 OperationQueue 个实例之间的优先级,您可以为它们赋予不同的 qualityOfService 值。
  • 要处理 Operation 个实例之间的优先级,您可以为它们赋予不同的 qualityOfServicequeuePrioritythreadPriority 值。

可以在iOS 应用 的能源效率指南的Prioritize Work with Quality of Service Classes section 中找到关于这些参数的一些额外说明。