delay & sleep
Espera un poco y produce un valor (delay) — o simplemente espera (sleep).
Lección
delay(wait, value) devuelve un Future que se
completa con value una vez transcurrido wait.
sleep(wait) es la misma idea pero sin nada que devolver —
simplemente se completa al cabo de esa duración. Ambas son envoltorios
finos sobre Future.delayed, y ambas son justo lo que
usarías para simular una operación lenta: una llamada de red, una
consulta a base de datos, cualquier cosa que tarde y acabe produciendo
(o no) un resultado.
Estas dos funciones son la columna vertebral de casi todas las demos
asíncronas de este sitio de tutoriales. Cada vez que veas
mapAsync, concurrent, debounce o
throttle demostrados con un Stopwatch que
prueba que algo corrió en paralelo o quedó limitado en ritmo, es
delay o sleep quien está esperando por debajo.
Demo 1 · Fundamentos
Demo 2 · Simular trabajo concurrente
Tres «peticiones» tardan 150 ms cada una, pero corren de forma concurrente — el lote entero termina bastante por debajo de 450 ms:
Pruébalo tú
Ejercicio: usa delay para simular un «fetch» de 100 ms que
devuelve 'pong'.
memoize — cachea un Future retardado para que solo espere una vez ·
concurrent — ejecuta varios delays en paralelo ·
debounce / throttle — limitar el ritmo, construido sobre la espera ·
toAsync — convierte un Iterable normal en un pipeline asíncrono