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:
- Az
AppDelegatea fő szálon fut. - A
dispatchQueue.main.syncszinkron módon próbál kódot végrehajtani a fő szálon, azaz várja a kódblokk befejezését. - De a fő szál már az
AppDelegatevégrehajtásával van elfoglalva, és várja, hogy asyncblokk befejeződjön. - A
syncblokk 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
}