DEV Community

GoyesDev
GoyesDev

Posted on

[SC] Diferencia entre tareas con y sin estructura

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:

  1. Atadas a un contexto.
  2. Si el contexto es cancelado, se notifica a la tarea (no implica que se cancela directamente).
  3. Flujo de ejecución predecible.

Por ejemplo:

async let result1 = asyncTask1()
async let result2 = asyncTask2()

let result = await [result1, result2]
Enter fullscreen mode Exit fullscreen mode
await withTaskGroup(of: String.self) {
  group.addTask { await asyncTask1() }
  group.addTask { await asyncTask2() }
}
Enter fullscreen mode Exit fullscreen mode

Tareas sin estructura ("Unstructured tasks")

Una tarea sin estructura se ejecuta independiente de algún contexto.

Algunas características:

  1. No están atadas a un contexto.
  2. Se debe cancelar manualmente la tarea.
  3. Más flexible, pero más riesgo (como condiciones de carrera o tareas huérfanas).

Por ejemplo:

let task = Task.detached {
    await asyncTask()
}
Enter fullscreen mode Exit fullscreen mode
let task = Task {
    await asyncTask()
}
Enter fullscreen mode Exit fullscreen mode

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.


Bibliografía

Top comments (0)