Middle+
Kas notiks, ja AppDelegate galvenajā pavedienā izsauksiet 'dispatchQueue.main.sync'?
sobes.tech AI
Atbilde no AI
Notiek Deadlock (savstarpēja bloķēšana).
Skaidrojums:
AppDelegatedarbojas galvenajā pavedienā.dispatchQueue.main.syncmēģina izpildīt kodu galvenajā pavedienā sinhroni, tas ir, gaida, kamēr kods blokā beigsies.- Bet galvenais pavedienu jau ir aizņemts ar
AppDelegateizpildi un gaida, kamērsyncblokā esošais kods beigsies. syncbloks nevar sākties, jo galvenais pavedienu ir aizņemts ar gaidīšanu.
Īsumā, galvenais pavedienu gaida bloka pabeigšanu, bet bloks gaida galvenā pavediena atbrīvošanu — rodas Deadlock. Lietotne apstāsies.
Kods, kas izraisīs Deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Lietotne palaista")
// Šī izsaukšana izraisīs Deadlock
DispatchQueue.main.sync {
print("Šis kods nekad netiks izpildīts")
}
print("Šis kods arī netiks sasniegts")
return true
}