У меня есть две разные большие задачи с несколькими подзадачами. Каждая подзадача имеет ребенка NSProgress
, который я обновляю вручную. Каждая большая задача хостов родителей NSProgress
с несколькимиКак отслеживать два NSProgress параллельно?
[progress becomeCurrentWithPendingUnitCount:1.0]
// Perform subtask which generates the child `NSProgress`.
[progress resignCurrent]
звонков в разное время. Каждая из двух отчетов о выполнении больших задач отлично работает с этой настройкой.
Моя проблема заключается в том, что я хочу выполнить эти две большие задачи параллельно, и я хочу отслеживать их прогресс в целом. Есть какой-либо способ сделать это?
Я попытался создать NSProgress
объект на внешнем уровне, чтобы обернуть два NSProgress
(так что три NSProgress
уровней в общей сложности) большая задача, но проблема заключается в том, что две задачи «борьба» при обновлении прогресса. То есть одна задача может выполнить becomeCurrentWithPendingUnitCount:
, а затем другая задача может выполнить resignCurrent
, что вызывает исключение (так как NSProgress
второй задачи не является текущим).
Выполнение двух задач последовательным, а не параллельным, устраняет проблему, но я действительно хотел бы выполнить их в одно и то же время. Есть идеи?
Выполняет ли дочерние задачи ваших задач «NSProgress» также «getCurrentWithPendingUnitCount:» и 'resignCurrent'? Моя проблема заключается в том, что у меня есть (эти совокупные задачи имеют свой собственный «NSProgress», а затем дальнейшие дочерние «NSProgress»), поэтому вызовы 'getCurrentWithPendingUnitCount:' и 'resignCurrent' вызовов вызывают или заказывают. Я полагаю, это не будет проблемой для вас, если ваши задачи просто используют leaf 'NSProgress' (два уровня« NSProgress »вместо трех). –
Итак, мой пример для метода 'startAsyncTask1' создает локальный' NSProgress' и говорит, что у меня есть 10 пользователей для синхронизации, поэтому он устанавливает общее количество единиц в 10 и становится текущим с 10 ожидающими ответа. Он вызывает запускает вызовы api, которые асинхронны и уходят в отставку, прежде чем какой-либо из этих асинхронных вызовов вернется. Внутри этих вызовов API я создаю «NSProgess» для каждого вызова, НО ПРОИЗВОД НИЗКОГО УРОВНЯ НЕ ДОЛЖЕН ОТКАЗАТЬСЯ. поэтому в вызове API я никогда не отказываюсь от этого прогресса, я только обновляю завершенные единицы. –
Я обновил ответ с большим количеством кода. Вы увидите, что конечная дочерняя задача не активируется и не сбрасывается. Мой реальный код мира - это задача, которая загружает все локальные объекты, загружает все локально созданные фотографии и загружает все новые объекты с сервера.Поэтому я создаю дочерний прогресс для каждого типа объекта, например 1 для задачи «Пользователи», 1 для задачи «Фото» вплоть до отдельных вызовов API. Шахта - 3 уровня глубины 'NSProgress'. –