Определение порядка вывода при асинхронных вызовах в главной очереди

Порядок вывода: 5, 15, 25, 30, 10, 20 — при исполнении указанного кода на main thread и последующей работе main queue.

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

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

Порядок вывода: 5, 15, 25, 30, 10, 20 — при исполнении указанного кода на main thread и последующей работе main queue.

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

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

Условие

В этом задании дан пример Swift‑кода, где вывод в консоль происходит как синхронно, так и асинхронно с помощью DispatchQueue.main.async. Необходимо понять, какие числа будут напечатаны и в каком порядке при запуске программы.

func executeFirstTask() {
    print(5)

    DispatchQueue.main.async {
        print(10)
    }

    print(15)

    DispatchQueue.main.async {
        print(20)
    }

    print(25)
}

func executeSecondTask() {
    print(30)
}

// Main Thread
executeFirstTask()
executeSecondTask()

Ответ

Порядок вывода: 5, 15, 25, 30, 10, 20 — при исполнении указанного кода на main thread и последующей работе main queue.

Обе функции выполняются синхронно в текущем главном вызове. Два main.async только ставят блоки в очередь, не прерывая его. Поэтому сначала завершается executeFirstTask с 5, 15, 25, затем executeSecondTask печатает 30. После возврата управления очередь исполняет ранее добавленные блоки в порядке 10, 20. Если это консольный процесс, его нельзя завершать до обслуживания отложенных блоков.

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

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

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

Подробнее