Junior — Middle
Mis juhtub, kui kasutate sünkrontse dispatchingut peamises järjekorras globaalses kontekstis?
sobes.tech AI
Vastus AI-lt
Kui te teete sünkrone dispatchi (näiteks DispatchQueue.main.sync { ... }) peamises järjekorras peamise voolu kaudu, tekib deadlock (vastastikune lukustamine).
Põhjus on selles, et peamine järjekord on juba hõivatud praeguse koodi täitmisega, ja sünkrone väljakutse püüab täita ploki, oodates selle lõppu. Kuid plokk ei saa alata, kuni praegune kood ei lõpe, mis viib lõpmatu ootamiseni.
Seetõttu tuleks vältida sünkrone väljakutseid peamises järjekorras peamise voolu kaudu. Selle asemel kasutage asünkroonseid väljakutseid (DispatchQueue.main.async { ... }), mis panevad ploki järjekorda ja võimaldavad praegusel koodil lõpetada.