Sobes.tech
Junior — Middle

Дар кад conditions истифодаи main.sync ба бастани мутақобии сӯрохиҳо намеорад?

sobes.tech AI

Ҷавоб аз AI

Истифодаи DispatchQueue.main.sync танҳо дар ҳолате, ки аз ҷониби нахустин ҷараён (main thread) набарояд, ба муқаррарӣ (deadlock) оварда намерасонад. Агар шумо main.sync-ро аз нахустин ҷараён иҷро кунед, он интизор мешавад, ки блок ба анҷом расад, ки оғоз кардан мумкин нест, зеро нахустин ҷараён аллакай машғул аст — ин deadlock-ро ба вуҷуд меорад.

Маслиҳати бехатар:

DispatchQueue.global().async {
    DispatchQueue.main.sync {
        // Навсозии UI
    }
}

Ин ҷо, даъвати main.sync аз ҷараёни пасзамина аст, бинобар ин, муаммо ба вуҷуд намеояд. Қоидаи асосӣ — ҳеҷ гоҳ DispatchQueue.main.sync-ро аз нахустин ҷараён набаред.