Junior — Middle
Co się stanie, jeśli użyjesz synchronicznego dispatchowania na głównej kolejce w kontekście globalnym?
sobes.tech AI
Odpowiedź od AI
Jeśli wywołasz synchroniczne dispatch (np. DispatchQueue.main.sync { ... }) na głównej kolejce z głównego wątku, dojdzie do deadlocka (zablokowania wzajemnego).
Przyczyną jest to, że główna kolejka jest już zajęta wykonywaniem bieżącego kodu, a synchroniczne wywołanie próbuje wykonać blok, oczekując na jego zakończenie. Jednak blok nie może się rozpocząć, dopóki bieżący kod się nie zakończy, co prowadzi do nieskończonego oczekiwania.
Dlatego należy unikać synchronicznych wywołań na głównej kolejce z głównego wątku. Zamiast tego używaj wywołań asynchronicznych (DispatchQueue.main.async { ... }), które umieszczają blok w kolejce i pozwalają na zakończenie bieżącego kodu.