mapConcurrent
Mapear con límite de concurrencia en un solo paso — toAsync().map(f).concurrent(n), precombinado.
Lección
«Corre esta función async sobre estos valores, como mucho n a
la vez, resultados en orden» es el pipeline async más común del código
real — y hasta ahora decirlo costaba tres operadores:
toAsync() para entrar al mundo
async, map(f) para transformar y
concurrent(n) para acotar la
evaluación. mapConcurrent(n, f) es exactamente esa
composición como un solo paso de la cadena.
Como es la composición — no una reimplementación —, todas las
garantías se conservan: los resultados llegan en orden de
origen (usa la forma larga con
concurrentPool cuando
quieras orden de finalización), como mucho concurrency
callbacks están en vuelo, y los operadores aguas abajo siguen tirando
perezosamente. Sobre una cadena ya async compone
map(f).concurrent(n), saltándose el puente.
Es una adición nativa de Dart: FxTS canaliza concurrent
como paso separado, y esa forma larga sigue disponible cuando necesites
intercalar otro operador entre el map y el límite.
Demo 1 · Fan-out acotado, resultados en orden
Demo 2 · Es exactamente map + concurrent
Pruébalo tú
Ejercicio: trae todos los usuarios de dos en dos, conservando el orden.
concurrent — el limitador subyacente ·
concurrentPool — orden de finalización en vez de orden de origen ·
toAsync — el puente sync→async que este operador absorbe ·
concurrent or parallel — I/O vs CPU