Sobes.tech
Junior — Middle

Kokiais atvejais main.sync naudojimas nesukels tarpusavio blokavimą?

sobes.tech AI

Atsakymas iš AI

DispatchQueue.main.sync naudojimas nesukels tarpusavio užblokavimo (deadlock), tik jei kvietimas nėra vykdomas iš pagrindinio srauto. Jei kviečiate main.sync iš pagrindinio srauto, šis srautas lauks bloko pabaigos, kuris negali prasidėti, nes pagrindinis srautas jau užimtas — tai sukelia deadlock.

Saugus naudojimo pavyzdys:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // UI atnaujinimas
    }
}

Čia main.sync kvietimas vykdomas iš foninio srauto, todėl užblokavimas nevyksta. Pagrindinė taisyklė — niekada nevykdyti DispatchQueue.main.sync iš pagrindinio srauto.