Sobes.tech
Middle+

Kas notiks, ja AppDelegate galvenajā pavedienā izsauksiet 'dispatchQueue.main.sync'?

sobes.tech AI

Atbilde no AI

Notiek Deadlock (savstarpēja bloķēšana).

Skaidrojums:

  1. AppDelegate darbojas galvenajā pavedienā.
  2. dispatchQueue.main.sync mēģina izpildīt kodu galvenajā pavedienā sinhroni, tas ir, gaida, kamēr kods blokā beigsies.
  3. Bet galvenais pavedienu jau ir aizņemts ar AppDelegate izpildi un gaida, kamēr sync blokā esošais kods beigsies.
  4. sync bloks 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
}