Sobes.tech
Junior — Middle

Est-il sûr d'ajouter des éléments à un tableau en utilisant des fonctions asynchrones et await ?

sobes.tech IA

Réponse de l'IA

La sécurité lors de l’ajout d’éléments à un tableau en utilisant des fonctions asynchrones et await dépend du contexte et de l’environnement d’exécution.

Sur iOS (Swift), lors de l’utilisation de code asynchrone et await, si plusieurs tâches asynchrones tentent de modifier simultanément le même tableau, cela peut entraîner une condition de course, conduisant à une corruption des données ou à un crash.

Pour ajouter des éléments en toute sécurité dans un contexte asynchrone, il faut :

  • Utiliser la sérialisation de l’accès au tableau, par exemple via DispatchQueue avec barrière ou acteurs (actors) en Swift Concurrency.
  • Éviter l’accès simultané à des structures de données modifiables sans synchronisation.

Exemple avec des acteurs :

actor SafeArray {
    private var array: [Int] = []

    func append(_ element: Int) {
        array.append(element)
    }

    func getArray() -> [Int] {
        return array
    }
}

let safeArray = SafeArray()

Task {
    await safeArray.append(1)
}

Task {
    await safeArray.append(2)
}

Ainsi, simplement utiliser await ne garantit pas la sécurité lors de l’ajout à un tableau — une synchronisation correcte de l’accès est nécessaire.