Sobes.tech
Middle

iOS өнүктүрүү контекстинде dispatch тобу эмне?

sobes.tech AI

AIден жооп

DispatchGroup — бул GCD (Grand Central Dispatch) механизм, ал эми ал асинхрондук тапшырмалар тобунун аяктоо жөнүндө көзөмөлдөөгө жана алардын аяктоосунан кийин ишти аткарууга мүмкүндүк берет. Бул бир нече башкаруучу кезектер же агымдар менен ишти синхрондоштуруу керек болгондо пайдалуу.

Негизги ыкмалары:

  • enter(): топко, иш башталганын кабарлайт. Топтун ички эсептегичин көбөйтөт.
  • leave(): топко, иш аяктады деп кабарлайт. Эсептегичти азайтат.
  • wait(): учурдагы агымды токтотот, топтун эсептегичи нөлгө жеткенче же убакыт аяктаганча.
  • notify(queue:execute:): коддун блокун катталат, ал асинхрондуу түрдө белгилүү кезекке ишке ашырылат, топтун эсептегичи нөлгө жеткенде.

notify колдонуу мисалы:

import Foundation

let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)

queue.async(group: group) {
    // Биринчи асинхрондуу тапшырма
    print("Тапшырма 1 ишке ашууда...")
    Thread.sleep(forTimeInterval: 1)
    print("Тапшырма 1 аяктады.")
}

queue.async(group: group) {
    // Экинчи асинхрондуу тапшырма
    print("Тапшырма 2 ишке ашууда...")
    Thread.sleep(forTimeInterval: 2)
    print("Тапшырма 2 аяктады.")
}

// Бардык тапшырмалар аяктагандан кийин бул блок ишке ашырылат
group.notify(queue: .main) {
    print("Бардык тапшырмалар топто аяктады.")
}

// Демонстрация үчүн notify-нин блоксуз табигаты
print("Тапшырмаларды кошкондон кийин код")

Алтернативдүү мисал — enter() жана leave() менен:

import Foundation

let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)

group.enter() // Тапшырма 1 башталды
queue.async {
    print("Тапшырма 1 ишке ашууда...")
    Thread.sleep(forTimeInterval: 1)
    print("Тапшырма 1 аяктады.")
    group.leave() // Тапшырма 1 аяктады
}

group.enter() // Тапшырма 2 башталды
queue.async {
    print("Тапшырма 2 ишке ашууда...")
    Thread.sleep(forTimeInterval: 2)
    print("Тапшырма 2 аяктады.")
    group.leave() // Тапшырма 2 аяктады
}

group.notify(queue: .main) {
    print("Бардык тапшырмалар notify аркылуу аяктады.")
}

// `wait` колдонуу мисалы (блоктоо)
// group.wait()
// print("Бардык тапшырмалар wait аркылуу аяктады.")