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.