Junior — Middle
Ի՞նչ կլինի, եթե օգտագործեք սինխրոնային դիսպետչինգը գլոբալ կոնտեքստում գլխավոր հերթում:
sobes.tech AI
Պատասխան AI-ից
Եթե դուք կանչեք սինխրոնային dispatch (օրինակ, DispatchQueue.main.sync { ... }) գլխավոր հերթում գլխավոր հոսքից, տեղի կունենա deadlock (միմյանց bloqueo):
Պատճառը այն է, որ գլխավոր հերթը արդեն զբաղված է ընթացիկ կոդի կատարմամբ, և սինխրոնային կանչը փորձում է կատարել բլոկը սպասելով նրա ավարտին: Բայց բլոկը չի կարող սկսվել, մինչև ընթացիկ կոդը չավարտվի, ինչը հանգեցնում է անսահման սպասման:
Հետևաբար, պետք է խուսափել սինխրոնային կանչերից գլխավոր հերթում գլխավոր հոսքից: Փոխարենը օգտագործեք ասինխրոնային կանչեր (DispatchQueue.main.async { ... }), որոնք բլոկը դնում են հերթում և թույլ են տալիս ընթացիկ կոդին ավարտվել։