Sobes.tech
Junior

Na czym polega różnica między żądaniami synchronicznymi a asynchronicznymi?

sobes.tech AI

Odpowiedź od AI

Zapytania synchroniczne blokują bieżący wątek wykonawczy do momentu otrzymania odpowiedzi. Zapytania asynchroniczne nie blokują wątku; odpowiedź jest przetwarzana po zakończeniu operacji, zazwyczaj za pomocą mechanizmu wywołania zwrotnego (callback), delegata lub zamknięcia.

Charakterystyka Zapytanie synchroniczne Zapytanie asynchroniczne
Blokada wątku Tak Nie
Reaktywność UI Może blokować UI Nie blokuje UI
Złożoność implementacji Prostsze Bardziej skomplikowane (zarządzanie stanem)
Użycie w iOS Rzadko, tylko dla krótkich zadań, nie na głównym wątku Zalecane, szczególnie dla długich operacji

Przykład zapytania asynchronicznego z użyciem URLSession:

// Tworzymy zadanie URLSession
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // Ten blok jest wykonywany asynchronicznie po zakończeniu zapytania
    if let error = error {
        print("Błąd: \(error.localizedDescription)")
        return
    }

    // Przetwarzanie otrzymanych danych
    if let data = data {
        print("Dane otrzymane, bajty: \(data.count)")
    }

    // Aktualizacja UI powinna odbywać się na głównym wątku
    DispatchQueue.main.async {
        // Aktualizacja UI
    }
}

// Uruchamiamy zadanie
task.resume()

// Kod tutaj jest wykonywany natychmiast, bez czekania na zakończenie zapytania
print("Wysłano zapytanie")