Junior — Middle
Kas nutiks, jei sinchroninį paskirstymą naudosite pagrindinėje eilėje globaliame kontekste?
sobes.tech AI
Atsakymas iš AI
Jei sinchroniškai iškviesite dispatch (pavyzdžiui, DispatchQueue.main.sync { ... }) pagrindinėje eilėje iš pagrindinio srauto, įvyks deadlock (tarpusavio blokavimas).
Priežastis ta, kad pagrindinė eilė jau užimta vykdant esamą kodą, o sinchroninis iškvietimas bando vykdyti bloką, laukiant jo pabaigos. Tačiau blokas negali pradėti, kol esamas kodas nesibaigia, kas sukelia begalinį laukimą.
Todėl reikėtų vengti sinchroninių iškvietimų pagrindinėje eilėje iš pagrindinio srauto. Vietoj to naudokite asinchroninius iškvietimus (DispatchQueue.main.async { ... }), kurie įkelia bloką į eilę ir leidžia esamam kodui užbaigti.