Sobes.tech
Middle+

Mi történik, ha az AppDelegate-ben a fő szálon meghívod a 'dispatchQueue.main.sync'-t?

sobes.tech MI

Válasz az MI-től

Deadlock (kölcsönös zárolás) fog bekövetkezni.

Magyarázat:

  1. Az AppDelegate a fő szálon fut.
  2. A dispatchQueue.main.sync szinkron módon próbál kódot végrehajtani a fő szálon, azaz várja a kódblokk befejezését.
  3. De a fő szál már az AppDelegate végrehajtásával van elfoglalva, és várja, hogy a sync blokk befejeződjön.
  4. A sync blokk nem kezdődhet el, mert a fő szál várakozik.

Röviden, a fő szál vár a blokk befejezésére, a blokk pedig a fő szál felszabadítására — deadlock keletkezik. Az alkalmazás lefagy.

Példa kód, ami deadlock-ot okoz:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    print("Alkalmazás elindult")

    // Ez a hívás deadlock-ot okoz
    DispatchQueue.main.sync {
        print("Ez a kód soha nem fog végrehajtódni")
    }

    print("Ez a kód szintén nem lesz elérhető")

    return true
}