AFNetworking + cancelAllRequests

У меня действительно есть проблема, когда я хочу остановить все текущие запросы в механизме синхронизации, построенном с AFNetworking.

У меня есть 5 разных URL-адресов для запроса. Каждый запрос запускается, если предыдущий был правильно выполнен.

Это работает очень хорошо.

Я хочу остановить процесс синхронизации в любое время. Поэтому мой код для этого:

- (void)cancelAllRequests
{
  NSLog(@"CancelAllRequests");

  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull_items"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"GET" path:@"ws/webapp/services/pull_image"];
  [[HTTPClient sharedClient] cancelAllHTTPOperationsWithMethod:@"POST" path:@"ws/webapp/services/push_item"];  
  [[[HTTPClient sharedClient] operationQueue] cancelAllOperations];
}

Но этот код ничего не делает. Когда я хочу отменить, я видел все пакетные операции, работающие в моих журналах после вызова метода.

Что я пропустил? Если я отменяю запросы, это не останавливает все активные операции с этими запросами?

Ответы

Ответ 1

Вам нужно сделать только [[[HTTPClient sharedClient] operationQueue] cancelAllOperations]. Операции, когда они отменены, пытаются завершить выполнение, насколько это возможно, но нет никакой гарантии точно, как это происходит. В случае пакетных операций он может быть завершен к моменту его отмены, поскольку все его операции запроса зависимостей завершены (путем отмены).