简体   繁体   English

如何将IEnumerable <Task <T >>转换为IObservable <T>

[英]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>. 是否有内置的方法将IEnumerable <Task <T >>转换为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() 我相信你所寻找的可能是Observable.Start()

You can then append .Subscribe(callbackMethod) to the end and specify a callback if needed. 然后,您可以将.Subscribe(callbackMethod)附加到末尾,并在需要时指定回调。

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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