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 кайтарат. |