timeout
Hace fallar cualquier pull individual que tarde más de limit con una TimeoutException.
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.
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