Ребят всем привет!
Сейчас изучаю курс Ивана по GCD, и так сложилось что не дойдя до данной темы меня позвали на собеседование, где предоставили простую задачу на данную тему.
Собственно хотел задать несколько вопросов по GCD.
Вопрос 1. В чем смысл добавления задач в Serial Queue асинхронно (async)
let queue = DispatchQueue(label: "Serial Queue)
queue.async {
print("Block 1")
}
P.S.Если я все правильно понял, задачи помещенные в Serial Queue, выполняются в строгой последовательности (FIFO, т.е. пока не завершится текущая задача в очереди, не начнется задача которая стоит следующей в очереди. Sync позволяет помещать задачи в очередь синхронно, т.е. мы дожидаемся ее выполнения. Async позволяет помещать задачи в очередь асинхронно, что подразумевает что мы не дожидается завершения выполнения задач, помещенных с помощью async.
Тогда какой смысл использовать для последовательной очереди async? Если можно сделать все через sync
Вопрос 2. Есть ли разница между следующими листингами
queue.async {
print("Block 1")
queue.async {
print("Block 2")
}
}
и
queue.async {
print("Block 1")
}
queue.async {
print("Block 2")
}
P.S.Меняется ли логика выполнения кода от вложенности ?
Вопрос 3. Пример с вопроса на собеседовании, с которым я не справился. Нужно объяснить что будет происходить в случае листинга указанного под номером 1 и листинга указанным под номером 2.
1)let queue = DispatchQueue(label: "com.app.queue")
queue.async { ... }
queue.async {
print("Task 1")
queue.sync {
print("Task 2")
}
print("Task 3")
}
2)let queue = DispatchQueue(label: "com.app.queue")
queue.async { ... }
queue.async {
print("Task 1")
queue.async {
print("Task 2")
}
print("Task 3")
}
P.S.Здесь я смог норм выдать только то что мы создаем в обоих случаях последовательную очередь в которую помещаем задачи. Сразу начал путаться из за вложенности в очередях. Можете пожалуйста помочь разобраться в очередности выполнения задач - как и что происходит в данном случае, на этой теме завис сильно, не могу прочувствовать логику работы при помещении в очередь задач синхронно/асинхронно