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
isCancelledtekshiruvi chastotasiga bog'liq. - Bekor qilingan
DispatchWorkItemnavbatga qo'shilishi mumkin, lekin uning bloki boshlashdan oldinisCancelledtekshirilsa, bajarilmaydi. - Allaqachon bajarilgan yoki bekor qilingan
DispatchWorkItemuchuncancel()chaqirish ta'sir qilmaydi.
Xususiyatlar:
| Xususiyat | Turi | Tavsifi |
|---|---|---|
isCancelled |
Bool |
Agar ish bekor qilingan bo'lsa, true qaytaradi. |