Sobes.tech
Junior — Middle

Hogyan lehet megszakítani egy aszinkron művelet végrehajtását?

sobes.tech MI

Válasz az MI-től

Az iOS-ben általában a következő megközelítéseket használják az aszinkron művelet megszakítására:

  1. URLSession feladat törlése — ha az aszinkron művelet hálózati kérdéssel kapcsolatos, meghívhatja a cancel() metódust a URLSessionTask objektumon.

  2. DispatchWorkItem használata — GCD-vel dolgozva létrehozhat egy DispatchWorkItem-et és meghívhatja a cancel()-t, hogy megpróbálja megszakítani a végrehajtást.

  3. Combine és Swift Concurrency — a Combine-ban leiratkozhat (AnyCancellable), míg a Swift Concurrency-ben (async/await) használhat Task-t és hívhatja a cancel()-t.

Példa Task-vel Swift Concurrency-ben:

let task = Task {
    for i in 1...10 {
        try Task.checkCancellation() // Megszakítás ellenőrzése
        print(i)
        try await Task.sleep(nanoseconds: 1_000_000_000)
    }
}

// Később, a megszakításhoz:
task.cancel()

Fontos, hogy az aszinkron műveletben legyen implementálva a megszakítás ellenőrzése, különben a művelet folytatódni fog.