Ի՞նչ եղանակներ կան Tasks-ները տեղադրելու համար 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()