timeout

Hace fallar cualquier pull individual que tarde más de limit con una TimeoutException.

FxAsyncIterable<A> timeoutAsync<A>(Duration limit, FxAsyncIterable<A> iterable) FxAsync<T> FxAsync<T>.timeout(Duration limit) // chain (async)

Lección

Un pipeline es tan reactivo como su await más lento. timeout(limit) le pone un límite a eso: cada pull — el trabajo de producir un elemento, atraviese los operadores de aguas arriba que atraviese — debe terminar dentro de limit, o el pull falla con una TimeoutException. Los elementos rápidos quedan intactos; el operador no añade retardo propio.

Semántica del modelo pull, y conviene ser preciso: el límite mide el tiempo de demanda a elemento — desde el momento en que aguas abajo pide hasta que el elemento llega. No mide los huecos entre elementos (no los hay sin demanda) ni acota el pipeline entero (eso es Future.timeout sobre el terminal: fxAsync(…).toList().timeout(…)). El timeout de RxDart vigila los huecos entre eventos de un stream push — mismo nombre, medido desde el otro lado.

Extensión de fxdart (sin contraparte en FxTS). Seguro en paralelo: bajo concurrent(n) cada pull solapado lleva su propio temporizador, así que n elementos algo lentos que se solapan siguen pasando individualmente. Combínalo con retry — timeout convierte «colgarse» en «fallar», y retry convierte «fallar» en «inténtalo otra vez».

Demo 1 · Atrapando el atasco

Demo 2 · Por pull, no por pipeline

Pruébalo tú

Ejercicio: acota el feed lento y luego recupérate.

Relacionado: retry — qué hacer después de que salte el timeout · concurrent — los pulls solapados expiran de forma independiente · errores tipados — capturar la TimeoutException como valor