რა მეთოდები არსებობს სამუშაოების განთავსებისთვის Grand Central Dispatch (GCD)-ის რიგში?
sobes.tech AI
პასუხი AI-სგან
GCD հերթում խնդիրներ տեղադրելու հետևյալ եղանակները կան:
-
Անսինխրոն կատարում (async): Թողարկում է խնդիրն ու անմիջապես շարունակվում է ընթացիկ հոսքում՝ սպասելու փոխարեն, որ խնդիրն ավարտվի։
DispatchQueue.global().async { // Կոդ խնդիր } -
Սինխրոն կատարում (sync): Թողարկում է խնդիրն ու ներկայիս հոսքը մնում է սպասելու՝ մինչև խնդիրն ավարտվի։ Խուսափեք օգտագործել sync գլխավոր հոսքում երկարատև խնդիրների համար, որպեսզի չխոչընդոտեք UI-ին։
DispatchQueue.global().sync { // Կոդ խնդիր, ներկայիս հոսքը կսպասի } -
Հետաձգված կատարում (asyncAfter): Թողարկում է խնդիրն նշված հետաձգմամբ։ Կատարման սկիզբը չի լինի շուտ, քան նշված ժամանակը։
DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) { // Կոդ խնդիր 2 վայրկյան անց կիրականացվի } -
Խմբում կատարման (DispatchGroup): Թողարկումները կարող են ավելացվել DispatchGroup-ին՝ նրանց ավարտը սինխրոնիզացնելու համար։ Կարող եք սպասել բոլորի ավարտին կամ ստանալ ծանուցում (notify) նրանց ավարտից հետո։
let group = DispatchGroup() group.enter() DispatchQueue.global().async { // Առաջին խնդիր group.leave() } group.enter() DispatchQueue.global().async { // Երկրորդ խնդիր group.leave() } group.notify(queue: .main) { // Բոլոր խնդիրները ավարտվել են } -
Կատարման կրկնություն (concurrentPerform): Թույլ է տալիս մի քանի անգամ միևնույն կոդի բլոկը կատարել՝ միաժամանակ՝ մրցակցային հերթում։
DispatchQueue.concurrentPerform(iterations: 100) { index in // Կոդ, որը կատարվում է յուրաքանչյուր ինդեքսի համար՝ միաժամանակ } -
DispatchWorkItem: Կապում է կոդի բլոկը և թույլ է տալիս չեղարկել առաջադրանքը՝ նախքան այն սկսելը կամ հետո՝ եթե այն դեռ չի սկսվել։
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Կոդ առաջադրանքի } DispatchQueue.global().async(execute: workItem!) // Կարող եք չեղարկել առաջադրանքը, եթե այն դեռ չի սկսվել // workItem?.cancel()