Sobes.tech
Junior — Middle

Оё имкон дорад иҷрои вазифаро дар GCD пеш аз анҷомаш қатъ кунад?

sobes.tech AI

Ҷавоб аз AI

Дар GCD (Grand Central Dispatch) мумкин нест, ки ҳангоми оғозёбӣ, вазифаи аллакай оғозёфтаи мустақиман қатъ карда шавад. Вазифаҳои фиристода ба навбат, то анҷом ёфтани онҳо иҷро мешаванд.

Аммо, мумкин аст, ки қатъ кардани вазифаро ба таври ғайримустақим амалӣ кард:

  • Барои вазифаҳои асинхрон, истифода баред DispatchWorkItem, ки метод cancel()-ро дастгирӣ мекунад. Вақте, ки вазифа, бояд пайваста хусусияти isCancelled-ро санҷад ва агар дархости қатъ кардан дода шавад, дуруст анҷом дода шавад.

Масалан:

let workItem = DispatchWorkItem {
    for i in 0..<1000 {
        if workItem.isCancelled {
            print("Вазифа қатъ карда шуд")
            return
        }
        // Иҷрои кор
    }
}

DispatchQueue.global().async(execute: workItem)

// Баъдтар
workItem.cancel()

Бинобар ин, қатъ кардан танҳо агар вазифа, дастгирӣ кунад, ки санҷиши қатъ карданро, мумкин аст, дар ғайри ҳол, онро маҷбурӣ қатъ кардан ғайриимкон аст.