Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions docs/design/08-select-cancelacion-timeouts.md
Original file line number Diff line number Diff line change
@@ -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.
3 changes: 3 additions & 0 deletions docs/superpowers/plans/2026-07-28-rust-async-course.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Loading