Sobes.tech
Junior

Ի՞նչ է dispatch խումբը։

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)