Junior — Middle
Как можете да прекъснете изпълнението на асинхронна операция?
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()
Важно е, в асинхронната операция да е реализирана проверка за отмена, иначе операцията ще продължи да се изпълнява.