func someTask() {
let _=""
Task{
let _=""
let data=await doBackgroundTask()
let _=data // Update UI with data
}
}
func doBackgroundTask() async->String{
// Heavy work here
return ""
}
Passos
3. Adicionei um ponto de interrupção nas linhas 15, 17, 19, 25
- a) as linhas 15, 17 e 19 estão sendo invocadas no thread principal, o que é bom e como esperado
- b) Mas a linha 25 também está sendo invocada no thread principal, o que não é esperado, e eu quero que isso aconteça no thread em segundo plano.
O que estou perdendo?
Supondo que você escreveu isso em uma
View
struct,doBackgroundTask
na verdade é implicitamente isolado do ator principal, porque oView
protocolo é declarado como isolado do ator principal.Você deve adicionar
nonisolated
se não quiser que ele fique isolado do ator.Substitua doBackgroundTask() pela implementação abaixo, ela será executada automaticamente no thread em segundo plano.
O URLSession executa internamente seu trabalho em threads em segundo plano.