Junior — Middle
Czy można przerwać wykonanie zadania w GCD przed jego zakończeniem?
sobes.tech AI
Odpowiedź od AI
W GCD (Grand Central Dispatch) nie można bezpośrednio przerwać wykonywania zadania, które już zostało uruchomione. Zadania wysłane do kolejki są wykonywane do momentu zakończenia.
Jednak można zaimplementować anulowanie zadania pośrednio:
- Dla zadań asynchronicznych użyj DispatchWorkItem, który obsługuje metodę cancel(). Zadanie samo musi okresowo sprawdzać właściwość isCancelled i poprawnie kończyć się, jeśli zostanie żądane anulowanie.
Przykład:
let workItem = DispatchWorkItem {
for i in 0..<1000 {
if workItem.isCancelled {
print("Zadanie anulowane")
return
}
// Wykonanie pracy
}
}
DispatchQueue.global().async(execute: workItem)
// Później
workItem.cancel()
W związku z tym, anulowanie jest możliwe tylko wtedy, gdy zadanie obsługuje sprawdzanie anulowania, w przeciwnym razie nie można go wymusić na przerwanie.