From ef2ea69d7a6c2c6765bef23119b8fd25c84ac757 Mon Sep 17 00:00:00 2001 From: Joel Alvarez Date: Tue, 28 Jul 2026 13:02:23 -0700 Subject: [PATCH] docs: specify select cancellation and timeouts --- docs/design/08-select-cancelacion-timeouts.md | 18 ++++++++++++++++++ .../plans/2026-07-28-rust-async-course.md | 3 +++ 2 files changed, 21 insertions(+) create mode 100644 docs/design/08-select-cancelacion-timeouts.md diff --git a/docs/design/08-select-cancelacion-timeouts.md b/docs/design/08-select-cancelacion-timeouts.md new file mode 100644 index 0000000..e81cf45 --- /dev/null +++ b/docs/design/08-select-cancelacion-timeouts.md @@ -0,0 +1,18 @@ +# Diseño: select!, Cancelación y Timeouts + +**Curso:** Rust Async · **Capítulo:** 08 · **Estado:** draft + +`select!` coordina varios futures y continúa con la primera rama preparada. Un +timeout convierte una espera potencialmente ilimitada en un resultado explícito. +La cancelación ocurre, normalmente, al soltar un future pendiente: por eso los +futures deben mantener invariantes correctas en cada punto de suspensión. + +## Invariantes + +1. Una rama ganadora no prueba que las otras hayan terminado. +2. Un timeout distingue expiración de error interno y éxito. +3. Cancelar no debe dejar recursos compartidos en estado inválido. +4. La equidad de `select!` no se presupone sin consultar el contrato del macro. + +El modelo del siguiente issue usará `tokio::time::timeout` y una tarea inmediata +para mostrar resultados deterministas, sin depender de sleeps frágiles. diff --git a/docs/superpowers/plans/2026-07-28-rust-async-course.md b/docs/superpowers/plans/2026-07-28-rust-async-course.md index ab2cbb7..24d0450 100644 --- a/docs/superpowers/plans/2026-07-28-rust-async-course.md +++ b/docs/superpowers/plans/2026-07-28-rust-async-course.md @@ -72,6 +72,9 @@ Para cada capítulo, antes de pasar al siguiente: - [x] #24 Implementar ejemplos de runtime de producción. - [x] #25 Escribir capítulo, comparativas, ejemplos y ejercicios. - [ ] Capítulo 08: `select!`, cancelación y timeouts. + - [x] #26 Especificar garantías y alternativas. + - [ ] #27 Implementar y probar modelos deterministas. + - [ ] #28 Escribir capítulo, diagrama, ejemplos y ejercicios. - [ ] Capítulo 09: canales y sincronización asíncrona. ### Milestone 4: Composición avanzada