Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

256
Vistas
Observable: obtener el último valor en intervalos hasta que finalice la fuente

Estoy buscando un selector observable con una firma similar a esta:

 static IObservable<T> TakeLatest(this IObservable<T> input, TimeSpan interval)

Que debería:

  1. Emite el primer elemento tan pronto como la entrada emite su primer elemento
  2. A partir de ese momento, en intervalos de tiempo fijos, emitir el elemento más reciente producido por la entrada
  3. Complete (o falle) siempre que la entrada se complete (o falle)

En términos de canicas, algo como lo siguiente, asumiendo intervalo = 2 unidades de tiempo:

Tiempo 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Aporte UN B C D mi F (completa)
Producción UN B D D mi mi completo (F ya no se emite)

¿Hay alguna forma lista para usar de hacerlo, o un selector razonablemente fácil para producir estos resultados?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Esto probablemente debería hacer exactamente lo que quieres. Aunque no lo he probado.

 /// <summary>Samples the source observable sequence at each interval, /// allowing repeated emissions of the same element.</summary> public static IObservable<T> SampleWithDuplicates<T>(this IObservable<T> source, TimeSpan interval, IScheduler scheduler = null) { scheduler ??= DefaultScheduler.Instance; return source.Publish(published => Observable .Interval(interval, scheduler) .WithLatestFrom(published, (_, x) => x) .Merge(published.FirstAsync()) .TakeUntil(published.LastOrDefaultAsync())); }
over 4 years ago · Santiago Trujillo Denunciar

0

He hecho lo siguiente ahora: creo que funciona, pero lo dejaré abierto en caso de que alguien pueda pensar en una forma más elegante (o puede pensar en un problema con mi implementación actual)

 static IObservable<T> TakeLatest(this IObservable<T> input, TimeSpan interval, IScheduler scheduler) => input .FirstAsync() .Select(_ => Observable.Interval(interval, scheduler).StartWith(0)) .Switch() .CombineLatest(input, (a,b) => (a,b)) .DistinctUntilChanged(x => xa) .Select(x => xb) .TakeUntil(input.LastAsync());
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda