Что выведет код Middle GCD и OperationQueue обновлено
Что выведет Swift: async и sync на последовательной очереди
Вопрос
Что выведет код? Очередь q последовательная.
import Dispatch
let q = DispatchQueue(label: "serial")
print("1")
q.async { print("2") }
q.sync { print("3") }
print("4")
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 1, 2, 3, 4. async ставит блок «2» в очередь и сразу возвращается. sync ставит блок «3» за ним и ждёт: последовательная очередь сначала выполнит «2», потом «3».
Что выведет
1
2
3
4
Разбор
async ставит блок «2» в очередь и сразу возвращается. sync ставит блок «3» за ним и ждёт: последовательная очередь сначала выполнит «2», потом «3». Только после этого текущий поток печатает «4».
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Термины по теме
Ещё по теме «GCD и OperationQueue»
- Асинхронная Operation
- Барьер для потокобезопасного кеша
- Инверсия приоритетов
- DispatchSemaphore для ограничения параллельности
- DispatchWorkItem и отмена
- Как дождаться нескольких запросов в GCD
- Задача на Swift: операции с зависимостями и критический путь
- Задача на Swift: OperationQueue с ограничением параллельности