Назад к вопросам
Junior
179
questionbank

Что такое dispatch группа?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech 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("Все задачи завершены")
}

// Чтобы main поток не завершился сразу. В реальном приложении это управляется циклом RunLoop
// Или wait() в случае синхронного ожидания (не рекомендуется в UI-приложениях)
Thread.sleep(forTimeInterval: 3)