Junior
Какво е група за разпределение?
sobes.tech AI
Отговор от AI
Dispatch Group е механизъм в рамките на рамката Grand Central Dispatch (GCD), който позволява групиране на задачи и получаване на известие, когато всички задачи в групата са завършили.
Основни методи:
enter(): Увеличава брояча на задачите в групата. Извиква се преди започване на асинхронна задача.leave(): Намалява брояча на задачите в групата. Извиква се след завършване на асинхронна задача.notify(queue:execute:): Регистрира блок код, който ще бъде изпълнен на указаната опашка след като броячът на задачите в групата достигне нула.wait(): Блокира текущия поток, докато броячът на задачите в групата не достигне нула. Трябва да се използва с внимание, за да се избегне блокиране на основния поток.
Пример за използване:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global()
queue.async(group: group) {
// Задача 1
print("Задача 1 изпълнява се")
Thread.sleep(forTimeInterval: 2)
print("Задача 1 завърши")
}
queue.async(group: group) {
// Задача 2
print("Задача 2 изпълнява се")
Thread.sleep(forTimeInterval: 1)
print("Задача 2 завърши")
}
group.notify(queue: DispatchQueue.main) {
// Този блок ще бъде изпълнен след завършване на всички задачи
print("Всички задачи са завършили")
}
// За да не приключи веднага основният поток. В реално приложение това се управлява с цикъл RunLoop
// Или с wait() при синхронно изчакване (не се препоръчва в UI приложения)
Thread.sleep(forTimeInterval: 3)