Sobes.tech
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, თუ სამუშაო გაუქმებულია.