es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

withThrowingTaskGroup – No se realizan llamadas a funciones que lanzan errores dentro de la expresión ‘try’

Problema:

Tengo la siguiente función que muestra una advertencia No se producen llamadas a funciones que arrojan dentro de la expresión 'try'

Preguntas:

  • ¿Por qué se muestra esta advertencia? (El código dentro de la tarea arroja un error)
  • ¿Qué debo hacer para propagar el error al llamador de f1?

Código:


func f1() async throws {
try await withThrowingTaskGroup(of: Int.self) { group in //No se producen llamadas a funciones que arrojan dentro de la expresión 'try'
group.addTask(priority: .high) {
throw NSError()
}
}
}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problema:

    Tengo la siguiente función que muestra una advertencia No calls to throwing functions occur within 'try' expression.

    Preguntas:

    • ¿Por qué se muestra esta advertencia? (El código dentro de la tarea lanza un error)
    • ¿Qué debo hacer para propagar el error hasta el llamador de f1?

    Respuestas:

    • La advertencia se muestra porque la función withThrowingTaskGroup es una función que lanza, pero no se está llamando dentro de un bloque try. En su lugar, la palabra clave try se está utilizando en la expresión await, que no es una función que lance.
    • Para propagar el error hasta el llamador de f1, el bloque try debe moverse para incluir toda la llamada a función withThrowingTaskGroup, así:
    func f1() async throws {
        try await withThrowingTaskGroup(of: Int.self) { group in
            group.addTask(priority: .high) {
                throw NSError()
            }
        }.get()
    }
    

    Al agregar el método .get() al final, obligamos a la función withThrowingTaskGroup a esperar hasta que se completen todas las tareas, y cualquier error lanzado durante las tareas se propagará hasta la función f1.

Comments are closed.