Sobes.tech
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)