Middle
iOS geliştirme bağlamında dispatch grubu nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
DispatchGroup — bu, GCD (Grand Central Dispatch) mekanizmasıdır ve asenkron görevlerin tamamlanmasını izlemeye ve tamamlandıktan sonra bir işlem yapmaya olanak tanır. Birden fazla dispatch kuyruğu veya iş parçacığının koordinasyonunda kullanışlıdır.
Ana yöntemler:
enter(): Gruba, bir görevin başladığını bildirir. Grubun iç sayacını artırır.leave(): Gruba, bir görevin tamamlandığını bildirir. Sayacı azaltır.wait(): Mevcut iş parçacığını, grubun sayacı sıfır olana veya zaman aşımı geçene kadar engeller.notify(queue:execute:): Belirtilen kuyruğa, grup sayacı sıfır olduğunda asenkron olarak çalıştırılacak bir kod bloğu kaydeder.
notify kullanımına örnek:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
queue.async(group: group) {
// Birinci asenkron görev
print("Görev 1 çalışıyor...")
Thread.sleep(forTimeInterval: 1)
print("Görev 1 tamamlandı.")
}
queue.async(group: group) {
// İkinci asenkron görev
print("Görev 2 çalışıyor...")
Thread.sleep(forTimeInterval: 2)
print("Görev 2 tamamlandı.")
}
// Bu blok, tüm görevler tamamlandıktan sonra çalıştırılır
group.notify(queue: .main) {
print("Tüm görevler tamamlandı.")
}
// Notify ile non-blocking doğasını göstermek için
print("Görevler eklendikten sonra kod")
Manuel enter() ve leave() ile alternatif örnek:
import Foundation
let group = DispatchGroup()
let queue = DispatchQueue.global(qos: .userInitiated)
group.enter() // Görev 1 başladı
queue.async {
print("Görev 1 çalışıyor...")
Thread.sleep(forTimeInterval: 1)
print("Görev 1 tamamlandı.")
group.leave() // Görev 1 tamamlandı
}
group.enter() // Görev 2 başladı
queue.async {
print("Görev 2 çalışıyor...")
Thread.sleep(forTimeInterval: 2)
print("Görev 2 tamamlandı.")
group.leave() // Görev 2 tamamlandı
}
group.notify(queue: .main) {
print("Tüm görevler, notify ile tamamlandı.")
}
// Kullanım örneği, bloklayıcı wait
// group.wait()
// print("Tüm görevler wait ile tamamlandı.") // Bu kod, tüm görevler tamamlandıktan sonra çalışır ve mevcut iş parçacığını engeller.