Порядок вывода: 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. Если это консольный процесс, его нельзя завершать до обслуживания отложенных блоков.