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:
-
URLSession feladat törlése — ha az aszinkron művelet hálózati kérdéssel kapcsolatos, meghívhatja a
cancel()metódust aURLSessionTaskobjektumon. -
DispatchWorkItemhasználata — GCD-vel dolgozva létrehozhat egyDispatchWorkItem-et és meghívhatja acancel()-t, hogy megpróbálja megszakítani a végrehajtást. -
Combine és Swift Concurrency — a Combine-ban leiratkozhat (
AnyCancellable), míg a Swift Concurrency-ben (async/await) használhatTask-t és hívhatja acancel()-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.