Middle
iOS inkişaf kontekstində dispatch qrupu nədir?
sobes.tech Süni İntellekt
AI-dan cavab
DispatchGroup — bu, GCD (Grand Central Dispatch) mexanizmi olan və asinxron tapşırıqlar qrupunun tamamlanmasını izləməyə və onların tamamlandıqdan sonra hərəkət etməyə imkan verən mexanizmdir. Bu, bir neçə dispatch növbəsinin və ya iş parçacığının işini koordinasiya etmək üçün faydalıdır.
Əsas metodlar:
enter(): Qrupa, tapşırığın başladığını bildirir. Qrupun daxili sayğacını artırır.leave(): Qrupa, tapşırığın tamamlandığını bildirir. Sayğacı azaldır.wait(): Cari iş parçacığını bloklayır, ta ki qrupun sayğacı sıfır olana və ya vaxt limiti keçənə qədər.notify(queue:execute:): Qeyd olunan növbədə, qrupun sayğacı sıfır olduqda, asinxron olaraq icra ediləcək kod blokunu qeydiyyatdan keçirir.
notify istifadə nümunəsi:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
queue.async(group: group) {
// Birinci asinxron tapşırıq
print("Tapşırıq 1 icra olunur...")
Thread.sleep(forTimeInterval: 1)
print("Tapşırıq 1 tamamlandı.")
}
queue.async(group: group) {
// İkinci asinxron tapşırıq
print("Tapşırıq 2 icra olunur...")
Thread.sleep(forTimeInterval: 2)
print("Tapşırıq 2 tamamlandı.")
}
// Bu blok, qrupdakı bütün tapşırıqlar tamamlandıqdan sonra icra ediləcək
group.notify(queue: .main) {
print("Bütün tapşırıqlar qrupda tamamlandı.")
}
// Notify-nin qeyri-bloklayıcı təbiətini göstərmək üçün
print("Tapşırıqlar əlavə edildikdən sonra kod")
Əl ilə enter() və leave() nümunəsi:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
group.enter() // Tapşırıq 1 başladı
queue.async {
print("Tapşırıq 1 icra olunur...")
Thread.sleep(forTimeInterval: 1)
print("Tapşırıq 1 tamamlandı.")
group.leave() // Tapşırıq 1 tamamlandı
}
group.enter() // Tapşırıq 2 başladı
queue.async {
print("Tapşırıq 2 icra olunur...")
Thread.sleep(forTimeInterval: 2)
print("Tapşırıq 2 tamamlandı.")
group.leave() // Tapşırıq 2 tamamlandı
}
group.notify(queue: .main) {
print("Bütün tapşırıqlar, notify ilə tamamlandı.")
}
// `wait` istifadə nümunəsi (bloklayıcı)
// group.wait()
// print("Bütün tapşırıqlar wait ilə tamamlandı.") // Bu kod, bütün tapşırıqlar tamamlandıqdan sonra icra olunacaq və cari iş parçacığını bloklayacaq.