race
El primer candidato en emitir gana: su stream entero se refleja, y todos los demás candidatos se cancelan en el acto.
Lección
Pregunta a la caché y a la red a la vez; quédate con quien responda
primero. Prueba tres mirrors de descarga; conserva el más rápido.
FxEvents.race(candidates) se suscribe a todos los
candidatos a la vez, y el primer evento en cualquier parte lo
decide: ese evento se entrega, y todo candidato perdedor se
cancela de inmediato — no se silencia, se cancela. Sus
sockets se cierran, su trabajo se detiene, sus eventos nunca ocurren.
Sé preciso sobre qué gana: el primer evento en cualquier parte elige al
ganador, y a partir de ahí la carrera refleja el stream ganador
al completo — cada evento posterior que produzca fluye a
través, y la carrera se cierra cuando el ganador se cierra. Un
error también puede ganar: un endpoint roto pero rápido vence
a uno sano pero lento, que es exactamente el comportamiento honesto —
preguntaste quién responde primero, y «falló» es una respuesta. Protege
los campos lentos y poco fiables con
timeout/retry
en cada candidato antes de ponerlos a correr.
Los candidatos que se cierran sin emitir nunca se retiran en silencio;
si todos lo hacen — o la lista de candidatos está vacía — la carrera se
cierra vacía. Fíjate en la dirección de la cancelación frente a su
vecino: switchMap cancela el
más viejo de streams sucesivos, race cancela el
más lento de streams simultáneos. Capa de eventos de fxdart,
según el race/amb de Rx.
Demo 1 · Caché contra red, perdedores cancelados
Demo 2 · Los errores pueden ganar, los candidatos vacíos se retiran
Pruébalo tú
Ejercicio: el más rápido de tres mirrors.