2016-06-01 151 views
4

在这个例子中,我以默认优先级启动100 NSURLSessionDataTask,但将最后一个设置为高优先级。然而,它似乎没有任何作用,因为最后一项任务仍然最后结束。NSURLSessionTaskPriority似乎被忽略?

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,没有任何区别。

+0

是上传还是下载任务? –

回答

5

优先级不会影响应用程序端的优先级。这是一个提示为主机响应优先级的几个请求。主持人完全可以忽略这一点。

提供提示如何URL会话任务从您的应用程序的优先级,指定每个任务的优先级主机。指定优先级仅提供提示,并且不保证性能。 [...]

[...]

您可以指定或在任何时候更改任务的优先级,但不是所有的网络协议到任务后的变化做出反应已经开始。没有API可以让您从主持人的角度确定任务的有效优先级。

+0

所以看起来我完全误解了这一点。优先级对队列顺序完全没有影响,最后添加的高优先级任务将最后开始。这是完全没用的lol – trapper

+0

不,它没有用,因为它传输给主机。但是,主机而不是客户端决定何时发送下载数据。 –

+0

但是,在100个低优先级任务已经完成之前,它不会传输到主机。完全没用。因此,如果我想要优先执行某些操作,我需要使用单独的NSURLSession。 – trapper