Sobes.tech
Junior — Middle

É seguro adicionar elementos a um array usando funções assíncronas e await?

sobes.tech IA

Resposta da IA

A segurança ao adicionar elementos a um array usando funções assíncronas e await depende do contexto e do ambiente de execução.

No iOS (Swift), ao trabalhar com código assíncrono e await, se várias tarefas assíncronas tentarem modificar simultaneamente o mesmo array, pode ocorrer uma condição de corrida, levando à corrupção de dados ou a uma falha.

Para adicionar elementos com segurança em um contexto assíncrono, deve-se:

  • Utilizar a serialização do acesso ao array, por exemplo, através de DispatchQueue com barreira ou atores (actors) em Swift Concurrency.
  • Evitar o acesso simultâneo a estruturas de dados modificáveis sem sincronização.

Exemplo usando atores:

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

Assim, usar apenas await não garante segurança ao adicionar a um array — é necessária uma sincronização adequada do acesso.