Sobes.tech
Junior

Qual è la differenza tra richieste sincrone e asincrone?

sobes.tech AI

Risposta dell'AI

Le richieste sincrone bloccano il thread di esecuzione corrente fino a ricevere una risposta. Le richieste asincrone non bloccano il thread; la risposta viene elaborata al termine dell'operazione, di solito tramite un meccanismo di callback, delegato o closure.

Caratteristica Richiesta sincrona Richiesta asincrona
Blocco del thread No
Reattività UI Può bloccare l'UI Non blocca l'UI
Complessità di implementazione Più semplice Più complessa (gestione dello stato)
Uso in iOS Raro, solo per compiti brevi, non sul thread principale Preferibile, soprattutto per operazioni lunghe

Esempio di richiesta asincrona con URLSession:

// Creare un URLSessionTask
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    // Questo blocco viene eseguito in modo asincrono dopo il completamento della richiesta
    if let error = error {
        print("Errore: \(error.localizedDescription)")
        return
    }

    // Elaborazione dei dati ricevuti
    if let data = data {
        print("Dati ricevuti, byte: \(data.count)")
    }

    // L'aggiornamento dell'UI deve avvenire sul thread principale
    DispatchQueue.main.async {
        // Aggiornare l'UI
    }
}

// Avviare il task
task.resume()

// Il codice qui viene eseguito immediatamente, senza attendere il completamento della richiesta
print("Richiesta inviata")