Junior — Middle
Μπορείτε να διακόψετε την εκτέλεση μιας εργασίας στο GCD πριν από την ολοκλήρωσή της;
sobes.tech AI
Απάντηση από AI
Στο GCD (Grand Central Dispatch), δεν είναι δυνατή η άμεση διακοπή μιας ήδη ξεκινημένης εργασίας. Οι εργασίες που έχουν σταλεί στην ουρά εκτελούνται μέχρι την ολοκλήρωσή τους.
Ωστόσο, μπορεί να υλοποιηθεί η ακύρωση μιας εργασίας έμμεσα:
- Για ασύγχρονες εργασίες, χρησιμοποιήστε το DispatchWorkItem, το οποίο υποστηρίζει τη μέθοδο cancel(). Η εργασία πρέπει να ελέγχει περιοδικά την ιδιότητα isCancelled και να τερματίζει σωστά αν ζητηθεί ακύρωση.
Παράδειγμα:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Εργασία ακυρώθηκε")
return
}
// Εκτέλεση εργασίας
}
}
DispatchQueue.global().async(execute: workItem)
// Αργότερα
workItem.cancel()
Έτσι, η ακύρωση είναι δυνατή μόνο αν η εργασία υποστηρίζει τον έλεγχο ακύρωσης, διαφορετικά δεν μπορεί να διακοπεί με βίαιο τρόπο.