Junior — Middle
Τι συμβαίνει αν χρησιμοποιήσετε συγχρονισμένη διανομή στην κύρια ουρά σε ένα παγκόσμιο πλαίσιο;
sobes.tech AI
Απάντηση από AI
Αν καλέσετε μια συγχρονική αποστολή (π.χ., DispatchQueue.main.sync { ... }) στην κύρια ουρά από το κύριο νήμα, θα προκύψει deadlock (αμοιβαία αποκλεισμός).
Ο λόγος είναι ότι η κύρια ουρά είναι ήδη απασχολημένη με την εκτέλεση του τρέχοντος κώδικα, και η συγχρονική κλήση προσπαθεί να εκτελέσει ένα μπλοκ περιμένοντας να ολοκληρωθεί. Αλλά το μπλοκ δεν μπορεί να ξεκινήσει μέχρι να τελειώσει ο τρέχων κώδικας, οδηγώντας σε ατέρμονη αναμονή.
Επομένως, πρέπει να αποφεύγονται οι συγχρονικές κλήσεις στην κύρια ουρά από το κύριο νήμα. Αντ' αυτού, χρησιμοποιήστε ασύγχρονες κλήσεις (DispatchQueue.main.async { ... }), που τοποθετούν το μπλοκ στην ουρά και επιτρέπουν στον τρέχοντα κώδικα να ολοκληρωθεί.