Junior — Middle
Mi történik, ha szinkron diszpécsert használunk a fő sorban globális kontextusban?
sobes.tech MI
Válasz az MI-től
Ha szinkron dispatch-t (például DispatchQueue.main.sync { ... }) hívunk a fő sorban a fő szálról, akkor deadlock (kölcsönös blokkolás) lép fel.
Az oka, hogy a fő sor már foglalt a jelenlegi kód végrehajtásával, és a szinkron hívás megpróbál egy blokkot végrehajtani, várva annak befejezésére. De a blokk nem kezdődhet el, amíg a jelenlegi kód nem fejeződik be, ami végtelen várakozáshoz vezet.
Ezért kerülni kell a szinkron hívásokat a fő sorban a fő szálról. Ehelyett használjon aszinkron hívásokat (DispatchQueue.main.async { ... }), amelyek a blokkot a sorba helyezik, és lehetővé teszik a jelenlegi kód befejezését.