2013-03-26 3 views
1

У меня проблема с приостановкой текущей выполняемой задачи. Я попытался установить NSOperationQueuesetSuspended=YES для приостановки и setSuspended=NO для возобновления процесса.Приостановка выполнения выполняемой задачи NSOperationQueue

Согласно apple docs Я не могу приостановить выполнение уже выполняющейся задачи.

Если вы хотите временно приостановить выполнение операций, вы можете приостановить соответствующую очередь операций с помощью метода setSuspended :. Приостановка очереди не приводит к тому, что уже выполняются операции для приостановки в середине их задач. Это просто предотвращает запуск новых операций для выполнения. Вы можете приостановить очередь в ответ на запрос пользователя, чтобы приостановить любую текущую работу, потому что ожидается, что пользователь может в конечном итоге захочет возобновить эту работу.

Мое приложение должно приостановить время, затрачиваемое на загрузку в случае недоступности Интернета, и, наконец, возобновить ту же операцию, как только будет доступен интернет. Есть ли какая-нибудь работа для этого? или мне просто нужно запустить текущую выполняемую задачу с нуля?

+1

Если при отправке вашего адресата поддерживается возобновление загрузки (например, веб-сервер), вы можете сохранить смещение последнего загруженного байта, когда соединение завершится с ошибкой, и перезапустите с этой позиции, когда соединение снова будет доступно –

ответ

1

Думаю, вам нужно начать с нуля. в противном случае туда придут две проблемы. Если вы возобновите текущую загрузку, вы не можете гарантировать, что вам не будут пропущены какие-либо пакеты или нет. В то же время, если соединение доступно через длительный период времени, сервер может удалить ранее загруженные данные из-за неполной операции.

1

Независимо от того, можете ли вы возобновить или приостановить рабочую очередь, это не ваша проблема здесь ... Если это сработало, как вы предполагали, может (а это не так), когда вы вернетесь к обслуживанию TCP-соединения, это может очень хорошо будет в плохом состоянии, он может быть тайм-аут, закрыт удаленно ... вы хотите узнать, что ваш сервер поддерживает и использует части службы REST (или аналогичных), чтобы возобновить застопоренную загрузку на бренд новое свежее соединение.

Если вы еще этого не сделали, распечатайте this и положите его на стены своего куба, сделайте футболки для членов вашей семьи, чтобы их носить ... может быть, добавить в качестве заставки?

Смежные вопросы