【问题标题】:Different DispatchQueue for different requests不同请求的不同 DispatchQueue
【发布时间】:2017-11-14 05:13:29
【问题描述】:

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

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

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

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

有什么方法可以控制执行请求的DispatchQueue(或OperationQueue)吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    要处理优先级,您有几个工具:

    • 要处理OperationQueue 实例之间的优先级,您可以为它们分配不同的qualityOfService 值。
    • 要处理Operation 实例之间的优先级,您可以将它们赋予不同的qualityOfService、queuePriority 或threadPriority 值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 2014-09-10
      • 1970-01-01
      • 2013-01-19
      • 2020-10-14
      • 1970-01-01
      • 2016-03-04
      相关资源
      最近更新 更多