Sobes.tech
Middle

DispatchWorkItem'dagi bekor qilish mexanizmi haqida gapiring.

sobes.tech AI

AIdan javob

DispatchWorkItem blok kodini ifoda qiladi, uni dispatch navbatida bajarish uchun rejalashtirish mumkin bo'lgan va uning haqiqiy bajarilishidan oldin bekor qilish mumkin bo'lgan.

Bekor qilish DispatchWorkItem ichidagi bayroq orqali amalga oshiriladi. Bekor qilish mexanizmi kooperativ: DispatchWorkItem o'z holatini muntazam ravishda tekshirishi kerak.

cancel() metodini chaqirish bilan, bekor qilish bayrog'i o'rnatiladi. Asl bajarilish faqat DispatchWorkItem kod blokida isCancelled xususiyati yordamida tekshirilsa, amalga oshiriladi.

Foydalanish misoli:

let vazifa: DispatchWorkItem = DispatchWorkItem {
    for i in 0..<100 {
        guard !self.isCancelled else { // Bekor qilish bayrog'ini tekshirish
            print("Operatsiya \(i) iteratsiyada bekor qilindi")
            return // Bajarishni yakunlash
        }
        // Foydali ishni bajarish
        Thread.sleep(forTimeInterval: 0.1) // Uzun operatsiyani taqlid qilish
    }
    print("Operatsiya yakunlandi")
}

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

// 1 sekunddan so'ng ishni bekor qilish
DispatchQueue.global().asyncAfter(deadline: .now() + 1) {
    vazifa.cancel()
}

Asosiy nuqtalar:

  • Darhol bekor qilish kafolatlanmaydi; bu isCancelled tekshiruvi chastotasiga bog'liq.
  • Bekor qilingan DispatchWorkItem navbatga qo'shilishi mumkin, lekin uning bloki boshlashdan oldin isCancelled tekshirilsa, bajarilmaydi.
  • Allaqachon bajarilgan yoki bekor qilingan DispatchWorkItem uchun cancel() chaqirish ta'sir qilmaydi.

Xususiyatlar:

Xususiyat Turi Tavsifi
isCancelled Bool Agar ish bekor qilingan bo'lsa, true qaytaradi.