Отмена URLSessionDataRequest находящегося в очереди

ios

#1

Условие:

  • Есть очередь с приоритетом .background
  • Есть таймер, который каждую секунду отправляет запрос по API и получает какие-то данные
  • Таймаут соединения для запроса установлен в 3 секунды

Проблема: Если мы выполняем запрос на сервер, и у нас имеется проблема с соединением, мы ставим каждую секунду на background очередь 3 запроса. По первому запросу наступает Timeout и клиент прилетает Alert в котором описывается причина проблемы, далее клиент жмет ОК, и ему прилетает еще два алерта, по следующим двум запросам, так как они были в очереди.

Вопрос: Как правильно реализовать поведение программы, чтобы после первого Alert’а остальные не приходили. Мне пришло в голову сделать только булевый флаг в ViewController’e после изменения которого алерт клиенту не отображать. Но с другой стороны даже если я сделаю так, два оставшихся сетевых запроса в очереди в любом случае будут висеть

Идеи: Сделать в NetworkManager массив типа [URLSessionDataTask], куда будет помещаться каждый новый сетевой запрос при выполнении. После первого таймаута просто пройтись по оставшимся элементам массива через NetworkManager, и отменить их с помощью .cancel()