c# .net linq .net-4.0 system.reactive

c# - Cómo convertir un IEnumerable<Task<T>> a IObservable<T>



.net linq (4)

Creo que esto funcionará

tasks.Select(t => Observable.FromAsync(() => t)) .Merge();

Cada tarea enviará sus resultados a la secuencia observable en cualquier orden que completen. Puede suscribirse a la secuencia y hacer lo que quiera con los resultados de esa manera.

¿Existe una forma integrada para convertir un IEnumerable <Task <T >> a un IObservable <T>. El orden no importa, solo que obtengo cosas, aunque preferiblemente cuando se completen.

Si aún no existe, ¿cuál podría ser una buena forma de lograrlo?


Creo que lo que estás buscando puede ser Observable.Start()

A continuación, puede agregar .Subscribe(callbackMethod) al final y especificar una devolución de llamada si es necesario.


Podrías hacerlo de esta manera:

var query = tasks.ToObservable().SelectMany(task => task.ToObservable());

O, alternativamente, así:

var query = from t in tasks.ToObservable() from i in t.ToObservable() select i;


A partir de Rx 2.0, hay una manera un poco más fácil:

var query = tasks.ToObservable().Merge();