6

在此示例中,我以默认优先级启动 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,没有区别。

4

2 回答 2

8

优先级不会影响您的应用程序方面的优先级。提示主机优先响应多个请求。主人可以完全忽略这一点。

要向主持人提供有关如何为您的应用程序中的 URL 会话任务优先级的提示,请为每个任务指定优先级。指定优先级仅提供提示,并不能保证性能。[…]

[…]

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

于 2016-06-18T19:16:54.217 回答
0

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

NSURLSession 对 HTTP/2 的支持

于 2020-03-17T03:38:29.003 回答