Асинхронная синхронизация основной очереди и асинхронная очередь по умолчанию Объяснение - PullRequest
0 голосов
/ 22 мая 2019

Я только что посмотрел это видео raywenderlich.com и снял этот снимок экрана соответствующего кода (@ 22:30).

Мне интересно, как mainQueue.async закончил после defaultQueue.async, несмотря на то, что его поместили в очередь с более высоким приоритетом (по умолчанию userInteractive или userInitiated, но независимо от default, верно?) , Я посмотрел все видео и почувствовал, что прекрасно разбираюсь во всем, пока не увидел это. Кто-нибудь, пожалуйста, сможет объяснить? Большое спасибо заранее.

1 Ответ

1 голос
/ 22 мая 2019

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

Основная очередь особенная; в отличие от всех других очередей отправки, блоки, добавленные в основную очередь, отправляются основным циклом выполнения приложения. Все остальные очереди отправки выполняют блоки в любом доступном потоке.

Таким образом, в то время как блок, который вы ставите в очередь для запуска в фоновом режиме, запускается практически сразу, все, что вы ставите в очередь для запуска в главном потоке, должно ждать циклов основного цикла выполнения и должно ждать своего хода вместе с таймерами, событиями пользовательского ввода, и т. д.

...