Sobes.tech
Middle

Պատմեք ինձ DispatchWorkItem-ում չեղարկման մեխանիզմի մասին։

sobes.tech AI

Պատասխան AI-ից

DispatchWorkItem ներկայացնում է կոդի բլոկ, որը կարող է պլանավորվել կատարման համար dispatch հերթում, և որը կարող է չեղարկվել իր իրական կատարման նախորդ։

Չեղարկումը իրականացվում է 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()-ի կանչը արդեն կատարված կամ չեղարկված DispatchWorkItem-ի վրա չի ունենա ազդեցություն։

Արժեքներ՝

Արժեք Տիպ Նկարագրություն
isCancelled Bool Վերադարձնում է true, եթե աշխատանքը չեղարկված է։