Sobes.tech
Middle+

AppDelegate'de ana akışta 'dispatchQueue.main.sync' çağrılırsa ne olur?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir Deadlock (karşılıklı kilitlenme) oluşur.

Açıklama:

  1. AppDelegate ana iş parçacığında çalışır.
  2. dispatchQueue.main.sync kodu, ana iş parçacığında eşzamanlı olarak çalışmaya çalışır, yani kod bloğunun tamamlanmasını bekler.
  3. Ama ana iş parçacığı zaten AppDelegate'i çalıştırmakla meşguldür ve sync içindeki bloğun tamamlanmasını bekler.
  4. sync içindeki blok, ana iş parçacığı beklediği için başlamaz.

Özetle, ana iş parçacığı bloğun tamamlanmasını beklerken, blok da ana iş parçacığının serbest kalmasını bekler — bir deadlock oluşur. Uygulama donar.

Deadlock oluşturacak kod örneği:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Uygulama başlatıldı")

    // Bu çağrı deadlock'a neden olur
    DispatchQueue.main.sync {
        print("Bu kod asla çalışmayacak")
    }

    print("Bu kod da ulaşmayacak")

    return true
}