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

9
有没有一种内置的方法可以将IEnumerable<Task<T>>转换为IObservable<T>?顺序无关紧要,只要我能够获取它们即可,最好是在它们完成时获取。
如果它目前不存在,有什么好的方法可以实现它吗?
4个回答

7

我相信这会起作用

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

每个任务都会在完成后将其结果发送到可观察序列中,无论它们完成的顺序如何。您可以订阅该序列,并以这种方式对结果进行任何操作。

2
您可以这样做:

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

或者,也可以像这样做:
var query =
    from t in tasks.ToObservable()
    from i in t.ToObservable()
    select i;

1

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

然后,你可以在末尾添加.Subscribe(callbackMethod),并根据需要指定回调。


0

从 Rx 2.0 开始,有一个稍微更简单的方法:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接