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.
Top comments (0)