Какой порядок вывода? №37

Будет напечатано только 7: printNumbers объявлена, но не вызывается. Запланированных ею блоков в реальном выполнении этого фрагмента нет.

Короткий ответ

Что ответить на собеседовании

Будет напечатано только 7: printNumbers объявлена, но не вызывается. Запланированных ею блоков в реальном выполнении этого фрагмента нет.

Подробный разбор

Ответ с пояснениями

Условие

Определите, в каком порядке будут напечатаны числа при выполнении следующего Swift‑кода:

func printNumbers() {
    print(1)
    DispatchQueue.main.async {
        print(2)
        DispatchQueue.main.async {
            print(3)
            DispatchQueue.global().sync {
                print(4)
            }
        }
        print(5)
    }
    print(6)
}
print(7)

Ответ

Будет напечатано только 7: printNumbers объявлена, но не вызывается. Запланированных ею блоков в реальном выполнении этого фрагмента нет.

Очереди внутри тела функции начинают играть роль только после вызова. Если добавить printNumbers() на главном потоке, синхронная часть напечатает 1, 6, затем главная очередь выполнит 2, 5, потом 3, 4, при условии работающего event loop. В отличие от main.sync из main queue, синхронный вызов global queue здесь сам по себе не создаёт такого же deadlock. Но это описание изменённого, а не исходного кода.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее