Junior
Kuo skiriasi sinchroniniai ir asinchroniniai užklausos?
sobes.tech AI
Atsakymas iš AI
Sinchroniniai užklausimai blokuoja esamą vykdymo srautą iki atsakymo gavimo. Asinchroninės užklausos neblokuoja srauto; atsakymas apdorojamas operacijai pasibaigus, dažniausiai naudojant atgalinio iškvietimo (callback), delegato ar užbaigimo mechanizmą.
| Savybė | Sinchroninė užklausa | Asinchroninė užklausa |
|---|---|---|
| Srauto blokavimas | Taip | Ne |
| UI reakcija | Gali blokuoti UI | Ne blokuoja UI |
| Įgyvendinimo sudėtingumas | Paprastesnė | Sudėtingesnė (būsenos valdymas) |
| Naudojimas iOS | Retai, tik trumpiems užduotims, ne pagrindiniame sraute | Pageidautina, ypač ilgesnėms operacijoms |
Pavyzdys asinchroninės užklausos naudojant URLSession:
// URLSession užduoties sukūrimas
let task = URLSession.shared.dataTask(with: url) { data, response, error in
// Šis blokas vykdomas asinchroniškai po užklausos pabaigos
if let error = error {
print("Klaida: \(error.localizedDescription)")
return
}
// Gauti duomenų apdorojimas
if let data = data {
print("Gauti duomenys, baitai: \(data.count)")
}
// UI atnaujinimas turi būti vykdomas pagrindiniame sraute
DispatchQueue.main.async {
// UI atnaujinimas
}
}
// Užduoties paleidimas
task.resume()
// Čia kodas vykdomas iš karto, nesulaukiant užklausos pabaigos
print("Užklausa išsiųsta")