Cum se poate întrerupe execuția unei operații asincrone?
sobes.tech AI
Răspuns de la AI
În iOS, de obicei, se folosesc următoarele abordări pentru a întrerupe o operație asincronă:
-
Anularea sarcinii URLSession — dacă operația asincronă este legată de o solicitare de rețea, se poate apela metoda
cancel()pe obiectulURLSessionTask. -
Utilizarea
DispatchWorkItem— atunci când lucrați cu GCD, puteți crea unDispatchWorkItemși apelacancel()pentru a încerca să întrerupe execuția. -
Combine și Swift Concurrency — în Combine, puteți anula abonamentul (
AnyCancellable), iar în Swift Concurrency (async/await), puteți folosiTaskși apelacancel().
Exemplu cu Task în Swift Concurrency:
let task = Task {
for i in 1...10 {
try Task.checkCancellation() // Verificare anulare
print(i)
try await Task.sleep(nanoseconds: 1_000_000_000)
}
}
// Mai târziu, pentru a anula:
task.cancel()
Este important ca în interiorul operației asincrone să fie implementată o verificare a anulării, altfel operația va continua să ruleze.