如何转换IEnumerable <task <t>&gt;到IObservable <t> </t> </task <t>

时间:2012-11-21 19:15:03

标签: c# .net linq .net-4.0 system.reactive

是否有内置的方法来转换IEnumerable&lt; Task&lt; T&gt;&gt;到IObservable&lt; T&gt;。顺序并不重要,只是我得到的东西,但最好是在他们完成后。

如果它还不存在,那可能是一个很好的方法来实现它?

4 个答案:

答案 0 :(得分:7)

我相信这会有用

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

每个任务都会以任何顺序将结果发送到可观察序列。您可以订阅序列,并以这种方式对结果执行任何操作。

答案 1 :(得分:2)

你可以这样做:

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

或者,或者,像这样:

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

答案 2 :(得分:1)

我相信你所寻找的可能是Observable.Start()

然后,您可以将.Subscribe(callbackMethod)追加到最后,并在需要时指定回调。

答案 3 :(得分:0)

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

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