Sobes.tech
Middle

DispatchWorkItemдеги жокко чыгаруу механизми жөнүндө айтып бер.

sobes.tech AI

AIден жооп

DispatchWorkItem — бул коддун блоку, аны диспетчерлөө кезегине пландаштырып, анын чынжырында ишке ашырылгандан кийин токтотууга болот.

Токтотуу DispatchWorkItem ичиндеги белги аркылуу ишке ашырылат. Токтотуу механизми кызматташтыктык: DispatchWorkItem өзүнүн токтотуу абалын дайыма текшерип турушу керек.

cancel() ыкмасын чакырганда, токтотуу белги коюлат. Чынжырда ишке ашырылуу гана болот, эгер DispatchWorkItem ичиндеги код блокунда бул белги isCancelled мүлкү аркылуу текшерилсе.

Колдонуу мисалы:

let иш: DispatchWorkItem = DispatchWorkItem {
    for i in 0..<100 {
        guard !self.isCancelled else { // Токтотуу белги текшерүү
            print("Иш токтотулду \(i) итерациясында")
            return // Ишти аяктоо
        }
        // пайдалуу ишти аткаруу
        Thread.sleep(forTimeInterval: 0.1) // узак ишти имитациялоо
    }
    print("Иш аяктады")
}

DispatchQueue.global().async(execute: иш)

// 1 секунддан кийин ишти токтотуу
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
    иш.cancel()
}

Негизги маанилер:

  • Дароо токтотуу кепилденбейт; бул isCancelled текшерүүнүн кайталануусуна көз каранды.
  • Токтотулган DispatchWorkItem кезекке коюлушу мүмкүн, бирок анын блокту ишке ашырбайт, эгер isCancelled башталаардан мурун текшерилсе.
  • cancel() чакыруусу, эгер иш аткарылган же токтотулган болсо, эч кандай таасир этпейт.

Өзгөрмөлөр:

Өзгөрмө Тип Түшүндүрмө
isCancelled Bool Эгер иш токтотулса, true кайтарат.