NSURLSession を使用して多くのファイルをダウンロードする必要があるユース ケースがあります。
セッション タスクがタイムアウトしないようにするには、セッション タスクを操作キューに配置し、同時ダウンロードの量を制限して飢えさせないようにする必要があります。
私の考えは、タスクの再開を nsoperation にロードし、それらを nsoperationqueue にロードして、同時アクティビティの数を制限するというものです。
問題は、[タスクの再開] を呼び出すと、コードが終了し、ファイルのダウンロードが完了するのを待っているにもかかわらず、nsoperation が完了したと見なされることです。
ここにいくつかのコードがあります。
NSURLSessionDownloadTask *task = [session downloadTaskWithRequest: request
completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
//move the file to a permanent location
CFRunLoopStop(CFRunLoopGetCurrent());
}
//I have instantiated a class global NSOperation queue.
[imageDownloadQueue addOperationWithBlock:^void() {
[task resume];
CFRunLoopRun();
}];
コールバックを待っている間、nsoperation スレッドを維持するにはどうすればよいですか? また、nsrunloop を使用して、ポートを NSMachPort に追加しようとしました。それは役に立たなかったようです。
また、タスクを再開するとタイムアウト タイマーが開始されるため、NSURLSession で HttpMaximumConnectionsPerHost を設定しても役に立ちません。つまり、以前よりも多くのタイムアウトが発生します。