Πώς μπορείτε να διακόψετε την εκτέλεση μιας ασύγχρονης λειτουργίας;
sobes.tech AI
Απάντηση από AI
Στο iOS, συνήθως χρησιμοποιούνται οι ακόλουθες προσεγγίσεις για να διακόψετε μια ασύγχρονη λειτουργία:
-
Ακύρωση εργασίας URLSession — εάν η ασύγχρονη λειτουργία σχετίζεται με ένα αίτημα δικτύου, μπορείτε να καλέσετε τη μέθοδο
cancel()στο αντικείμενοURLSessionTask. -
Χρήση
DispatchWorkItem— κατά την εργασία με GCD, μπορείτε να δημιουργήσετε έναDispatchWorkItemκαι να καλέσετεcancel()για να προσπαθήσετε να διακόψετε την εκτέλεση. -
Combine και Swift Concurrency — στο Combine, μπορείτε να ακυρώσετε τη συνδρομή (
AnyCancellable), και στο Swift Concurrency (async/await), μπορείτε να χρησιμοποιήσετε τοTaskκαι να καλέσετεcancel().
Παράδειγμα με Task στη Swift Concurrency:
let task = Task {
for i in 1...10 {
try Task.checkCancellation() // Έλεγχος ακύρωσης
print(i)
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
// Αργότερα, για ακύρωση:
task.cancel()
Είναι σημαντικό να υλοποιηθεί έλεγχος ακύρωσης μέσα στη ασύγχρονη λειτουργία, διαφορετικά η λειτουργία θα συνεχίσει να εκτελείται.