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]
. Операции, когда они отменены, пытаются завершить выполнение, насколько это возможно, но нет никакой гарантии точно, как это происходит. В случае пакетных операций он может быть завершен к моменту его отмены, поскольку все его операции запроса зависимостей завершены (путем отмены).