Sobes.tech
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.