Middle
ԻՕՍ զարգացման համատեքստում 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-ով.")