Junior — Middle
Είναι δυνατόν να διακόψετε την εκτέλεση μιας εργασίας που ξεκίνησε μέσω GCD κατά τη διάρκεια της εκτέλεσής της;
sobes.tech AI
Απάντηση από AI
Στο GCD (Grand Central Dispatch), δεν υπάρχει ενσωματωμένος μηχανισμός για την υποχρεωτική διακοπή μιας ήδη σε εξέλιξη εργασίας. Μόλις μια εργασία (μπλοκ) αρχίσει να εκτελείται, δεν μπορεί να διακοπεί από έξω.
Για να υλοποιήσετε τη δυνατότητα ακύρωσης, πρέπει να προβλέψετε τον έλεγχο μιας σημαίας ακύρωσης μέσα στην ίδια την εργασία. Για παράδειγμα, χρησιμοποιήστε μια ατομική μεταβλητή ή μια σημαία που ελέγχεται περιοδικά κατά τη διάρκεια της εκτέλεσης της εργασίας και επιτρέπει την πρόωρη ολοκλήρωσή της αν χρειάζεται.
Παράδειγμα:
var isCancelled = false
dispatchQueue.async {
for i in 0..<1000 {
if isCancelled {
print("Η εργασία ακυρώθηκε")
break
}
// Εκτέλεση μέρους της εργασίας
}
}
// Σε άλλο σημείο
isCancelled = true
Αν χρειάζεται πιο ευέλικτη ακύρωση, σκεφτείτε τη χρήση του Operation και του OperationQueue, που έχουν ενσωματωμένη υποστήριξη για ακύρωση εργασιών.