2016-06-01 143 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