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): Белгиленген блокту
iterationsжолу параллелдүү аткарууга мүмкүндүк берет.DispatchQueue.concurrentPerform(iterations: 100) { index in // Ар бир индекс үчүн параллелдүү аткарылуучу код } -
DispatchWorkItem: Коду блоктогон жана тапшырманы анын башталгандан мурун же башталганга чейин жокко чыгара турган мүмкүнчүлүк берет.
var workItem: DispatchWorkItem? workItem = DispatchWorkItem { // Тапшырманын коду } DispatchQueue.global().async(execute: workItem!) // Эгер ал башталбаган болсо, жокко чыгара аласыз // workItem?.cancel()