Junior — Middle
Czy możliwe jest anulowanie wykonania zadania przy użyciu GCD w iOS?
sobes.tech AI
Odpowiedź od AI
W GCD (Grand Central Dispatch) na iOS bezpośrednie anulowanie zadania jest niemożliwe, jeśli zadanie już zostało uruchomione. GCD nie zapewnia wbudowanego mechanizmu do przerwania działającego bloku.
Jednak można zaimplementować pośrednie anulowanie:
- Używać flag lub zmiennych stanu, które są sprawdzane wewnątrz bloku zadania i w razie potrzeby kończyć wykonywanie wcześniej.
- Dla operacji asynchronicznych używać DispatchWorkItem, który obsługuje metodę cancel(). Anulowanie przez DispatchWorkItem zapobiega uruchomieniu zadania, jeśli jeszcze się nie rozpoczęło.
Przykład z DispatchWorkItem:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Zadanie anulowane")
return
}
// Wykonanie pracy
print(i)
}
}
DispatchQueue.global().async(execute: workItem)
// Anuluj zadanie
workItem.cancel()
W ten sposób anulowanie jest możliwe przed rozpoczęciem lub wewnątrz zadania, sprawdzając flagę, ale nie można przerwać już działającego bloku w GCD.