Sobes.tech
Junior

V čem spočívá rozdíl mezi synchronními a asynchronními požadavky?

sobes.tech AI

Odpověď od AI

Synchronní požadavky blokují aktuální vlákno provádění, dokud nedostanou odpověď. Asynchronní požadavky neblokují vlákno; odpověď je zpracována po dokončení operace, obvykle pomocí mechanismu zpětného volání (callback), delegáta nebo uzávěru.

Charakteristika Synchronní požadavek Asynchronní požadavek
Blokování vlákna Ano Ne
Reaktivita UI Může blokovat UI Neblokuje UI
Složitost implementace Jednodušší Složitější (řízení stavu)
Použití v iOS Zřídka, pouze pro krátké úkoly, ne na hlavním vlákně Preferováno, zejména pro dlouhé operace

Příklad asynchronního požadavku s URLSession:

// Vytvoření URLSessionTask
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // Tento blok se provádí asynchronně po dokončení požadavku
    if let error = error {
        print("Chyba: \(error.localizedDescription)")
        return
    }

    // Zpracování přijatých dat
    if let data = data {
        print("Data přijata, bajty: \(data.count)")
    }

    // Aktualizace UI by měla probíhat na hlavním vlákně
    DispatchQueue.main.async {
        // Aktualizace UI
    }
}

// Spuštění úkolu
task.resume()

// Kód zde se provádí okamžitě, aniž by čekal na dokončení požadavku
print("Požadavek odeslán")