При выполнении на главном потоке порядок — 1, 3, 2. Без указания вызывающего потока между 2 и 3 строгого порядка нет.
Какой вывод получит программа?
При выполнении на главном потоке порядок — 1, 3, 2. Без указания вызывающего потока между 2 и 3 строгого порядка нет.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите порядок печати строк при выполнении следующего Swift‑кода:
print("1")
DispatchQueue.main.async {
print("2")
}
print("3")
Какие числа появятся в консоли и в каком порядке?
Ответ
При выполнении на главном потоке порядок — 1, 3, 2. Без указания вызывающего потока между 2 и 3 строгого порядка нет.
1 печатается до постановки async-блока. Если этот код находится в текущем main-блоке, очередь не выполнит 2, пока он не завершится после 3. Если код идёт на фоновом потоке, main queue может успеть напечатать 2 раньше 3. В короткой консольной программе дополнительно требуется работа главной очереди до завершения процесса; иначе отложенная печать может не произойти. async означает неблокирующую постановку, а не обещание запуска после всех следующих строк другого потока.