Sobes.tech
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.