Junior — Middle
Wat gebeurt er als je synchronisatie-dispatching op de hoofdlijst in een globale context gebruikt?
sobes.tech AI
Antwoord van AI
Als je een synchronische dispatch-aanroep (bijvoorbeeld DispatchQueue.main.sync { ... }) op de hoofdwachtrij vanuit de hoofdthread doet, zal er een deadlock (wederzijdse blokkering) optreden.
De reden is dat de hoofdwachtrij al bezig is met het uitvoeren van de huidige code, en de synchronische oproep probeert een blok uit te voeren en te wachten tot het klaar is. Maar het blok kan niet beginnen voordat de huidige code is voltooid, wat leidt tot een oneindig wachten.
Daarom moeten synchronische oproepen op de hoofdwachtrij vanuit de hoofdthread worden vermeden. Gebruik in plaats daarvan asynchrone oproepen (DispatchQueue.main.async { ... }), die het blok in de wachtrij plaatsen en de huidige code laten voltooien.