简体   繁体   中英

How to convert an IEnumerable<Task<T>> to IObservable<T>

Is there a built in way to convert an IEnumerable<Task<T>> to an IObservable<T>. Order doesn't matter, just that I get things, though preferably as they're completed.

If it doesn't exist yet, what might be a good way to accomplish it?

I believe this will work

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

Each task will send its results to the observable sequence in whatever order they complete. You can subscribe to the sequence and do whatever you want with the results that way.

You could do it this way:

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

Or, alternatively, like this:

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

I believe what you're looking for may be Observable.Start()

You can then append .Subscribe(callbackMethod) to the end and specify a callback if needed.

从Rx 2.0开始,有一种更简单的方法:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM