Junior — Middle
გლობალურ კონტექსტში მთავარი რიგის სინქრონული დისპეჩერიზაციის გამოყენებისას რა მოხდება?
sobes.tech AI
პასუხი AI-სგან
თუ თქვენ ახორციელებთ სინქრონულ დისპეჩს (მაგალითად, DispatchQueue.main.sync { ... }) მთავარ რიგში მთავარი ნაკადიდან, მოხდება deadlock (შეთავაზების ბლოკირება).
მიზეზი ის არის, რომ მთავარი რიგი უკვე დაკავებულია მიმდინარე კოდის შესრულებით, და სინქრონული გამოძახება ცდილობს შეასრულოს ბლოკი, ელოდება მის დასრულებას. მაგრამ ბლოკი ვერ დაიწყება, სანამ მიმდინარე კოდი არ დასრულდება, რაც იწვევს უსასრულო ელოდებას.
ამიტომ, უნდა თავიდან აიცილოთ სინქრონული გამოძახებები მთავარ რიგში მთავარი ნაკადიდან. ამის ნაცვლად, გამოიყენეთ ასინქრონული გამოძახებები (DispatchQueue.main.async { ... }), რომლებიც ბლოკს აყენებს რიგში და საშუალებას აძლევს მიმდინარე კოდს დასრულდეს.