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.