delay & sleep

Espera un poco y produce un valor (delay) — o simplemente espera (sleep).

Future<T> delay<T>(Duration wait, T value) Future<void> sleep(Duration wait)

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'.

Relacionado: 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