Middle
გთხოვთ, მითხრათ DispatchWorkItem-ის გაუქმების მექანიზმის შესახებ.
sobes.tech AI
პასუხი AI-სგან
DispatchWorkItem წარმოადგენს ბლოკს კოდის, რომელსაც შეუძლია განთავსდეს დისპეჩერის რიგში, და მას შეუძლია გაუქმდეს მის შესრულებამდე.
გაუქმება განხორციელებულია DispatchWorkItem-ის შიგნით არსებული ფლაგის მეშვეობით. გაუქმების მექანიზმი არის კოოპერატიული: DispatchWorkItem თავად უნდა რეგულარულად შეამოწმოს მისი გაუქმების სტატუსი.
როდესაც იძახით cancel() მეთოდს DispatchWorkItem-ზე, ფლაგი იძენს მნიშვნელობას. რეალური შეჩერება ხდება მხოლოდ იმ შემთხვევაში, თუ კოდის ბლოკში ხდება ამ ფლაგის შემოწმება isCancelled თვისების გამოყენებით.
გამოყენების მაგალითი:
let სამუშაო: DispatchWorkItem = DispatchWorkItem {
for i in 0..<100 {
guard !самостоятельноВыполняемыйОбъект.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, თუ სამუშაო გაუქმებულია. |