Sobes.tech
Junior — Middle

Čo sa stane, ak použijete synchronizované dispatchovanie na hlavnej fronte v globálnom kontexte?

sobes.tech AI

Odpoveď od AI

Ak zavoláte synchronnú dispatch (napríklad DispatchQueue.main.sync { ... }) na hlavnej fronte z hlavného vlákna, dôjde k deadlocku (vzájomnému zablokovaniu).

Dôvodom je, že hlavná fronta je už obsadená vykonávaním aktuálneho kódu a synchronná volanie sa snaží spustiť blok, čakajúci na jeho dokončenie. Ale blok nemôže začať, kým aktuálny kód neskončí, čo vedie k nekonečnému čakaniu.

Preto je potrebné sa vyhnúť synchronným volaniam na hlavnej fronte z hlavného vlákna. Namiesto toho používajte asynchrónne volania (DispatchQueue.main.async { ... }), ktoré blok vložia do fronty a umožnia aktuálnemu kódu dokončiť sa.