Sobes.tech
Middle

Кадом усулҳо барои ҷойгир кардани вазифаҳо дар навбатии Grand Central Dispatch (GCD) вуҷуд доранд?

sobes.tech AI

Ҷавоб аз AI

Исти роҳҳои зерин барои ҷойгир кардани вазифаҳо дар навбатии GCD мавҷуданд:

  1. Иҷрои асинхронӣ (async): Вазифа ба навбат илова мешавад ва иҷрои он фавран дар ҷараёни ҳозира идома мекунад, бе интизор шудан барои анҷоми вазифа дар навбат.

    DispatchQueue.global().async {
        // Код вазифа
    }
    
  2. Иҷрои синхронӣ (sync): Вазифа ба навбат илова мешавад ва ҷараёни ҳозира монеъ мешавад то анҷоми вазифа дар навбат. Аз истифодаи sync дар ҷараёни асосӣ барои вазифаҳои дарозмуддат худдорӣ кунед, то ки UI баста нашавад.

    DispatchQueue.global().sync {
        // Код вазифа, ҷараёни ҳозира интизор мешавад
    }
    
  3. Иҷрои таъхиршуда (asyncAfter): Вазифа бо таъхири муайян ба навбат илова мешавад. Иҷрои он на камтар аз вақти нишон додашуда оғоз мешавад.

    DispatchQueue.global().asyncAfter(deadline: .now() + 2.0) {
        // Код вазифа пас аз 2 сония иҷро мешавад
    }
    
  4. Иҷро дар гурӯҳ (DispatchGroup): Вазифаҳо метавонанд ба DispatchGroup илова шаванд барои ҳамоҳангсозии анҷоми онҳо. Шумо метавонед интизор шавед, ки ҳама иҷро шаванд ё пас аз анҷоми онҳо огоҳӣ гиред (notify).

    let group = DispatchGroup()
    
    group.enter()
    DispatchQueue.global().async {
        // Вазифа 1
        group.leave()
    }
    
    group.enter()
    DispatchQueue.global().async {
        // Вазифа 2
        group.leave()
    }
    
    group.notify(queue: .main) {
        // Ҳама вазифаҳо дар гурӯҳ анҷом ёфтаанд
    }
    
  5. Истифодаи iterations (concurrentPerform): Имкон медиҳад, ки блоки коди муайянро iterations маротиба параллел иҷро кунад дар навбатии рақобат.

    DispatchQueue.concurrentPerform(iterations: 100) { index in
        // Код, ки барои ҳар индекс параллел иҷро мешавад
    }
    
  6. DispatchWorkItem: Блоки кодиро мепӯшад ва имкон медиҳад, ки вазифаро пеш аз оғоз ё пас аз илова ба навбат, агар он ҳанӯз оғоз нашуда бошад, бекор кард.

    var workItem: DispatchWorkItem?
    
    workItem = DispatchWorkItem {
        // Код вазифа
    }
    
    DispatchQueue.global().async(execute: workItem!)
    
    // Мумкин аст, вазифаро бекор кард, агар он ҳанӯз оғоз нашуда бошад
    // workItem?.cancel()