Task<Success, Failure> es una estructura genérica que espera recibir el tipo de dato que devuelve y el tipo de error que arroja. No es necesario especificar estos valores cuando se implementa un Task, puesto que son inferidos automáticamente.
let tarea1: Task<Int, Swift.Error> = Task { () -> Int in
throw URLError(.badURL)
}
let tarea2: Task<Int, Never> = Task { () -> Int in
0
}
Manejando errores dentro de un Task
Se puede manejar un error internamente, usando un do/catch.
let tarea: Task<String, Never> = Task { () -> String in
do {
throw URLError(.badURL)
} catch {
return "Hubo un error"
}
}
Esperar una tarea y atrapar potenciales errores
Si se quiere esperar a una tarea y atrapar un posible error, se puede usar la propiedad var value: Success { get async throws }.
En el siguiente ejemplo se espera por el resultado de la tarea tarea y se atrapa cualquier error en el bloque catch.
let tarea: Task<String, Error> = Task { () -> String in
throw URLError(.badURL)
}
do {
let result = try await self.tarea.value
} catch {
print("Hubo un error: \(error)")
}
Errores tipados y Tasks
Actualmente las tareas no tienen errores tipados. Es decir, el siguiente código producirá un error:
let throwingTask: Task<String, URLError> = Task { () -> String in
throw URLError(.badURL)
}
Top comments (0)