Junior — Middle
Kādās situācijās main.sync lietošana nesagādās savstarpēju bloķēšanu?
sobes.tech AI
Atbilde no AI
DispatchQueue.main.sync izmantošana nesagādās savstarpēju bloķēšanu (deadlock), ja tā tiek izsaukta ne no galvenā pavediena. Ja jūs izsaucat main.sync no galvenā pavediena, tas gaidīs, kamēr bloks tiks pabeigts, kas nevar sākties, jo galvenais pavediens jau ir aizņemts — tas novedīs pie deadlock.
Droša piemērs:
DispatchQueue.global().async {
DispatchQueue.main.sync {
// UI atjaunināšana
}
}
Šeit main.sync tiek izsaukts no fonu pavediena, tāpēc nenotiek bloķēšana. Galvenā noteikuma ir nekad neizsaukt DispatchQueue.main.sync no galvenā pavediena.