Middle+
Kas nutiks, jei AppDelegate pagrindiniame sraute iškviesti 'dispatchQueue.main.sync'?
sobes.tech AI
Atsakymas iš AI
Įvyksta Deadlock (tarpusavio blokavimas).
Paaiškinimas:
AppDelegateveikia pagrindiniame sraute.dispatchQueue.main.syncbando vykdyti kodą pagrindiniame sraute sinchroniškai, t.y., laukia, kol užbaigsis kodo blokas.- Bet pagrindinis srautas jau užimtas
AppDelegatevykdymo ir laukia, kolsyncblokas pasibaigs. syncblokas negali pradėti, nes pagrindinis srautas užimtas laukimu.
Trumpai tariant, pagrindinis srautas laukia bloko pabaigos, o blokas laukia pagrindinio srauto laisvės — įvyksta Deadlock. Programėlė užšals.
Kodo pavyzdys, kuris sukels Deadlock:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
print("Programėlė paleista")
// Šis iškvietimas sukels Deadlock
DispatchQueue.main.sync {
print("Šis kodas niekada nebus vykdomas")
}
print("Šis kodas taip pat nebus pasiektas")
return true
}