Sobes.tech
Junior — Middle

Τι συμβαίνει αν χρησιμοποιήσετε συγχρονισμένη διανομή στην κύρια ουρά σε ένα παγκόσμιο πλαίσιο;

sobes.tech AI

Απάντηση από AI

Αν καλέσετε μια συγχρονική αποστολή (π.χ., DispatchQueue.main.sync { ... }) στην κύρια ουρά από το κύριο νήμα, θα προκύψει deadlock (αμοιβαία αποκλεισμός).

Ο λόγος είναι ότι η κύρια ουρά είναι ήδη απασχολημένη με την εκτέλεση του τρέχοντος κώδικα, και η συγχρονική κλήση προσπαθεί να εκτελέσει ένα μπλοκ περιμένοντας να ολοκληρωθεί. Αλλά το μπλοκ δεν μπορεί να ξεκινήσει μέχρι να τελειώσει ο τρέχων κώδικας, οδηγώντας σε ατέρμονη αναμονή.

Επομένως, πρέπει να αποφεύγονται οι συγχρονικές κλήσεις στην κύρια ουρά από το κύριο νήμα. Αντ' αυτού, χρησιμοποιήστε ασύγχρονες κλήσεις (DispatchQueue.main.async { ... }), που τοποθετούν το μπλοκ στην ουρά και επιτρέπουν στον τρέχοντα κώδικα να ολοκληρωθεί.