NSURLSession и многопоточность для загрузки нескольких файлов - PullRequest
0 голосов
/ 17 января 2019

У меня есть приложение на iOS, которое хочет загрузить данные с моего сервера. Данные - не что иное, как простые текстовые файлы. Я хотел бы скачать эти файлы параллельно. Я запутываюсь, если мне нужно создать несколько экземпляров nsurlsession или несколько задач (NSURLSessionTasks) в рамках одной nsurlsession.

Я знаю, что API-интерфейсы nsurlsession являются поточно-ориентированными. И моя фундаментальная путаница заключается в следующем:

Моя NsurlsessionConfiguration будет одинаковой для всего времени. Таким образом, в идеале я могу использовать один и тот же экземпляр NSURLSession для каждого файла. Но имеет ли смысл параллельно создавать несколько экземпляров NSURLSessionTasks? Или лучше подходить к созданию нового сеанса NSURLS для достижения параллелизма.

Я смущен, чтобы понять, создает ли каждая NSURLSessionTask в том же NSURLSession новую конечную точку или она сериализуется.

1 Ответ

0 голосов
/ 17 января 2019

Один сеанс с множеством задач - по одному на запрос - будет работать безопасно одновременно. Независимо от того, выполняет ли клиент запросы ко многим серверам или к одному, не имеет значения, если параллелизм меньше HTTPMaximumConnectionsPerHost, который является частью конфигурации сеанса.

Задачи выполняются параллельно. (На самом деле довольно трудно найти место в документах, где эти слова появляются явно , но здесь есть довольно хорошее значение ).

Обратите внимание, что у конфигов сеанса есть delegateQueue. Обоснование - поскольку задачи сеансов выполняются одновременно, - уровню приложения необходимо сериализовать обработку результатов, чтобы две параллельные задачи не пересекались друг с другом через делегата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...