Sobes.tech
Junior — Middle

Is het veilig om elementen aan een array toe te voegen met behulp van asynchrone functies en await?

sobes.tech AI

Antwoord van AI

De veiligheid bij het toevoegen van elementen aan een array met behulp van asynchrone functies en await hangt af van de context en de uitvoeromgeving.

Op iOS (Swift), wanneer je werkt met asynchrone code en await, kan er een raceconditie ontstaan als meerdere asynchrone taken proberen tegelijkertijd dezelfde array te wijzigen, wat kan leiden tot datacorruptie of een crash.

Om elementen veilig toe te voegen in een asynchrone context, moet je:

  • Toegang tot de array serialiseren, bijvoorbeeld via DispatchQueue met barrier of actors in Swift Concurrency.
  • Gelijktijdige toegang tot wijzigbare datastructuren zonder synchronisatie vermijden.

Voorbeeld met actors:

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

Dus, simpelweg gebruik maken van await garandeert geen veiligheid bij het toevoegen aan een array — juiste synchronisatie van de toegang is nodig.