Sobes.tech
Junior — Middle

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ă:

  1. Anularea sarcinii URLSession — dacă operația asincronă este legată de o solicitare de rețea, se poate apela metoda cancel() pe obiectul URLSessionTask.

  2. Utilizarea DispatchWorkItem — atunci când lucrați cu GCD, puteți crea un DispatchWorkItem și apela cancel() pentru a încerca să întrerupe execuția.

  3. Combine și Swift Concurrency — în Combine, puteți anula abonamentul (AnyCancellable), iar în Swift Concurrency (async/await), puteți folosi Task și apela cancel().

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.