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")