Sobes.tech
Junior — Middle

Co se stane, pokud použijete synchronní dispatch na hlavní frontě v globálním kontextu?

sobes.tech AI

Odpověď od AI

Pokud zavoláte synchronní dispatch (například DispatchQueue.main.sync { ... }) na hlavní frontě z hlavního vlákna, dojde k deadlocku (vzájemnému zablokování).

Důvodem je, že hlavní fronta již je obsazena vykonáváním aktuálního kódu a synchronní volání se pokouší spustit blok, čekající na jeho dokončení. Ale blok nemůže začít, dokud aktuální kód neskončí, což vede k nekonečnému čekání.

Proto je třeba se vyhnout synchronním voláním na hlavní frontě z hlavního vlákna. Místo toho používejte asynchronní volání (DispatchQueue.main.async { ... }), která blok vloží do fronty a umožní aktuálnímu kódu dokončit se.