Tareas con estructura ("Structured tasks")
Una tarea estructurada hace parte de la jerarquía de un contexto (Task, actor o TaskGroup) y hereda su ciclo de vida.
Algunas características:
- Atadas a un contexto.
- Si el contexto es cancelado, se notifica a la tarea (no implica que se cancela directamente).
- Flujo de ejecución predecible.
Por ejemplo:
async let result1 = asyncTask1()
async let result2 = asyncTask2()
let result = await [result1, result2]
await withTaskGroup(of: String.self) {
group.addTask { await asyncTask1() }
group.addTask { await asyncTask2() }
}
Tareas sin estructura ("Unstructured tasks")
Una tarea sin estructura se ejecuta independiente de algún contexto.
Algunas características:
- No están atadas a un contexto.
- Se debe cancelar manualmente la tarea.
- Más flexible, pero más riesgo (como condiciones de carrera o tareas huérfanas).
Por ejemplo:
let task = Task.detached {
await asyncTask()
}
let task = Task {
await asyncTask()
}
Es importante señalar que todas las tareas asíncronas deben empezar en un contenedor sin estructura. Sin embargo, una vez adentro, las tareas ya tienen estructura.
Resumen
Las tareas con estructura están organizadas en una jerarquía con relaciones padre-hijo claras, asegurando la propagación de prioridad y cancelación. Las tareas sin estructura, como las Task.detached, se ejecutan independientemente de un contexto y requieren gestión manual del ciclo de vida y comportamiento.
Top comments (0)