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