9

是否有内置方法可以将 IEnumerable<Task<T>> 转换为 IObservable<T>。顺序并不重要,只要我得到东西,虽然最好是完成后。

如果它还不存在,什么可能是完成它的好方法?

4

4 回答 4

7

我相信这会奏效

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

每个任务都会以它们完成的任何顺序将其结果发送到可观察序列。您可以订阅该序列并以这种方式对结果做任何您想做的事情。

于 2012-11-21T20:23:27.620 回答
2

你可以这样做:

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

或者,或者,像这样:

var query =
    from t in tasks.ToObservable()
    from i in t.ToObservable()
    select i;
于 2012-11-22T00:55:10.320 回答
1

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

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

于 2012-11-21T19:19:20.077 回答
0

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

var query = tasks.ToObservable().Merge();
于 2014-08-27T12:42:45.947 回答