Как надежно управлять фоновыми запросами? - PullRequest
2 голосов
/ 25 марта 2011

Мне нужно асинхронно выполнить запрос к http-серверу и обработать ответ.Запрос действительно - довольно большая цепочка вызовов методов с обратными вызовами .Это добавляет сложности, поскольку в цепочке вызовов существует множество путей возврата.

Не должно быть возможности начать новый запрос, пока текущий запрос не будет полностью завершен.

Вот общая схема:

  1. Некоторые вызовы потоков [Foo poll].
  2. Метод poll запускает пару HTTP-запросов, которые выполняются в фоновом режиме.В этом случае ASIHTTPRequest.
  3. Запросы в конечном итоге вызывают [Foo onRequestComplete], который анализирует ответ.При ошибке [Foo onRequestError] вызывается.Это второй путь возврата.
  4. Затем на сервер выполняется больше вызовов с обратными вызовами и дополнительными путями возврата.
  5. В конечном итоге некоторые вещи сохраняются на диск.
  6. Опросзавершено

Вот подвох: во время этих шагов вызовы poll должны игнорироваться (возвращаться) или блокироваться до завершения опроса.

Как можноВы уверены, что функциональные блоки poll или no-ops во время другого опроса?

1 Ответ

2 голосов
/ 25 марта 2011

Просто используйте NSLock.

В [Foo poll]:

if ([lock tryLock]) {
    // Do your stuff
}

В [Foo onRequestComplete]:

[lock unlock];
...