Sobes.tech
Junior — Middle

Este sigur să adăugați elemente într-un array folosind funcții asincrone și await?

sobes.tech AI

Răspuns de la AI

Securitatea adăugării elementelor într-un array folosind funcții asincrone și await depinde de context și de mediul de execuție.

Pe iOS (Swift), atunci când lucrezi cu cod asincron și await, dacă mai multe sarcini asincrone încearcă să modifice simultan același array, poate apărea o condiție de cursă, ducând la corupție de date sau la o cădere.

Pentru a adăuga elemente în mod sigur într-un context asincron, trebuie:

  • Să serializați accesul la array, de exemplu, prin DispatchQueue cu barieră sau actori (actors) în Swift Concurrency.
  • Să evitați accesul simultan la structuri de date modificabile fără sincronizare.

Exemplu cu actori:

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)
}

Prin urmare, simpla utilizare a await nu garantează siguranța la adăugarea în array — este nevoie de o sincronizare corectă a accesului.