NSURLSessionTaskPriority似乎被忽略了?

时间:2016-06-01 06:56:12

标签: objective-c nsurlsession nsurlrequest nsurlsessiontask

在此示例中,我以默认优先级启动100 NSURLSessionDataTask,但随后将最后一个设置为高优先级。然而它似乎根本没有任何影响,因为最后一个任务仍然最后运行。

NSURLSession *session = ...
NSURLRequest *request = ...

for (int i = 1; i<=100; i++) {
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSLog(@"%d", i);
    }];
    if (i == 100) {
        dataTask.priority = NSURLSessionTaskPriorityHigh;
    }
    [dataTask resume];
}

为什么高优先级的此任务在默认优先级的其他99之前运行?我希望在添加高优先级任务之前可能会开始执行一些早期任务,但不是全部。

我甚至尝试将HTTPMaximumConnectionsPerHost设置为1,没有任何区别。

2 个答案:

答案 0 :(得分:6)

优先级不会影响应用程序的优先级。它是提示,主机可以优先响应多个请求。主持人可以完全忽略它。

  

要向主机提供有关如何从应用程序确定URL会话任务优先级的提示,请为每项任务指定优先级。指定优先级仅提供提示,不保证性能。 [...]

     

[...]

     

您可以随时指定或更改任务的优先级,但并非所有网络协议都会在任务开始后响应更改。没有API可以让您从主持人的角度确定任务的有效优先级。

答案 1 :(得分:0)

您的服务器需要支持HTTP / 2。
NSURLSessionTaskPriority是HTTP / 2优先级帧/依赖项权重的包装。

NSURLSession's support of HTTP/2