Deve-se usar o thread principal para continuar após chamar uma função assíncrona com await dentro de uma tarefa iniciada no método viewDidLoad?
sobes.tech IA
Resposta da IA
No iOS, se chamar uma função assíncrona com await dentro de uma tarefa iniciada em viewDidLoad, é importante entender em qual thread a continuação ocorrerá após await.
Por padrão, se usar await dentro de Task sem especificar prioridades ou despachantes, a continuação pode ocorrer em qualquer thread, não necessariamente na principal. Isso pode causar problemas ao atualizar a interface do usuário, pois todas as alterações na interface devem ocorrer na thread principal.
Para garantir que após await o código continue na thread principal, pode-se explicitamente mudar para o despachante principal usando await MainActor.run { ... } ou usar @MainActor no método ou classe.
Exemplo:
override func viewDidLoad() {
super.viewDidLoad()
Task {
let data = await fetchData()
await MainActor.run {
self.updateUI(with: data)
}
}
}
Assim, deve-se usar a thread principal para continuar se precisar trabalhar com a UI após uma operação assíncrona.