Отмена сети Swift: URLSession.data(for:) (async/await) и dataTaskPublisher (объединить)IOS

Программируем под IOS
Ответить
Anonymous
 Отмена сети Swift: URLSession.data(for:) (async/await) и dataTaskPublisher (объединить)

Сообщение Anonymous »

Я разрабатываю сетевой уровень в своем приложении Swift для iOS 17 и более поздних версий, и мне нужен надежный механизм для отмены определенных сетевых запросов, особенно загрузки отдельных файлов. Я рассматриваю два основных подхода: URLSession.data(for:) с async/await и URLSession.dataTaskPublisher с объединением.
Задача:
Мое приложение позволяет пользователям загружать несколько файлов в виде вложений. Мне нужна возможность отменить загрузку определенного файла, не затрагивая другие текущие загрузки.
Конкретный сценарий:
Представьте себе представление, в котором пользователь может прикрепить к сообщению несколько файлов. Если пользователь решает удалить одно из вложений во время загрузки, мне нужно отменить только задачу загрузки этого файла, не прерывая остальные.
Подход 1 : async/await с URLSession.data(for:)
Этот метод выглядит чище и современнее. Однако он не предоставляет базовый URLSessionDataTask напрямую. Из-за этого неясно, как идентифицировать и отменить конкретную задачу загрузки, особенно когда может выполняться несколько загрузок.
Подход 2: объединить с URLSession.dataTaskPublisher< /p>
Этот подход предоставляет экземпляры AnyCancellable, предлагающие способ управления запросами и их отмены. Недостатком является дополнительная сложность хранения и связывания этих AnyCancellables с уникальными идентификаторами (например, URL-адресами или UUID) для обеспечения целенаправленной отмены.

Подробнее здесь: https://stackoverflow.com/questions/793 ... tataskpubl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»