Junior — Middle
Czy można przerwać wykonanie zadania uruchomionego przez GCD podczas jego realizacji?
sobes.tech AI
Odpowiedź od AI
W GCD (Grand Central Dispatch) nie ma wbudowanego mechanizmu do wymuszonego zatrzymania już uruchomionego zadania. Po rozpoczęciu wykonywania zadania (bloku), nie można go przerwać z zewnątrz.
Aby zaimplementować możliwość przerwania, należy samodzielnie przewidzieć sprawdzanie flagi anulowania wewnątrz samego zadania. Na przykład, użyć atomowej zmiennej lub flagi, która jest okresowo sprawdzana podczas wykonywania zadania, i w razie potrzeby kończyć pracę wcześniej.
Przykład:
var isCancelled = false
dispatchQueue.async {
for i in 0..<1000 {
if isCancelled {
print("Zadanie anulowane")
break
}
// Wykonanie części pracy
}
}
// W innym miejscu
isCancelled = true
Jeśli potrzebujesz bardziej elastycznego anulowania, rozważ użycie Operation i OperationQueue, które mają wbudowane wsparcie dla anulowania operacji.