Это, вероятно, не совсем ответ на ваш вопрос, вы сами ответили на него довольно хорошо, но, тем не менее, я чувствую, что это необходимо.
Я хотел бы подчеркнуть, как вы НЕ должны делать длительные пробежки операция на основном потоке. Без причины. На самом деле, если вы хотите, чтобы экран обновлялся sh 60 раз в секунду (что всегда должно быть вашей целью), это означает, что каждый блок кода, который вы отправляете в основной поток, должен длиться менее 0,016 секунды (1/60), чтобы избежать потерять несколько кадров. Если, тем временем, вам также нужно, чтобы основной поток выполнял какую-то сложную анимацию и другие вещи, вполне вероятно, что вам нужно go далеко за 0,016 секунды.
Если вы заблокируете основной поток для гораздо больше (например, 1 секунда в этом случае), чем пользователи будут испытывать застрявший интерфейс, они не могут прокручивать scrollView или перемещаться по приложению. Они также могут полностью закрыть ваше приложение, поскольку они могут чувствовать, что оно застряло.
В вашем случае, например, вы можете захотеть добавить хорошую анимацию загрузки, такую как ActivityIndicator или более приятную анимацию, к express, на самом деле вы работаете в этот момент и не зависли. Это действительно ожидается пользователями в настоящее время. Вы можете (или нет, это зависит от вас) также захотеть добавить кнопку отмены, если пользователь хочет отменить длительную операцию и сделать что-то еще с вашим приложением.
Чтобы избежать слов, вызывающих потерю производительности (задача замедляется до 7-8 секунд), вы можете использовать serialQueue с высоким качеством обслуживания . Возможно, userInitiated - это то, что вам нужно.
Таким образом, у вас все еще есть приоритет для этих задач ОС, но вы не заблокируете основной поток в это время, что позволяет вам добавить эту загрузку анимация, например.
Если это все еще слишком низкая производительность, вы можете подумать о разделении задачи на подзадачи и выполнении их параллельно, используя DispatchQueue.concurrentPerform (iterations: execute:) (но я не знаю, выполнимо ли это в вашем случае).
Надеюсь, это вам поможет. Приветствия