我正在将响应式编程应用于Unity3D项目。 有没有办法在 Observable.WhenAll(( 中指定可变数量的 Observable?
示例或搜索结果建议使用显式方法来输入所有非可变项,其中大多数不是可变项。
var parallel = Observable.WhenAll(
ObservableWWW.Get ("http://google.com/"),
ObservableWWW.Get ("http://bing.com/"),
ObservableWWW.Get ("http://unity3d.com/");
我想要的如下。
List<string> URLs = new List<string>();
URLs.Add("http://google.com/");
URLs.Add("http://bing.com/");
...
...
var parallel = Observable.WhenAll( ??? //ObservableWWW.Get() : count of URLs list);
请回复。 谢谢。
WhenAll(这个 IEnumerable> 源(已经这样做了。我怀疑真正的问题是如何从 URL 列表中生成一些可观察量。一种方法是使用 LINQ:
var urlObservables=URLs.Select(url=>ObservableWWW.Get(url));
var allAsOne= Observable.WhenAll(urlObservables);
更新
正如Felix Keil所评论的那样,如果OP只想观察其中的几个可观察物怎么办?这是 LINQ 的 Take(( 的工作,应用于 URL 列表或可观察量列表,例如:
var someObservables=URLs.Take(2).Select(url=>ObservableWWW.Get(url));
甚至
var someObservables=URLs.Select(url=>ObservableWWW.Get(url)).Take(2);
LINQ 的延迟计算意味着运算符仅在枚举someObservables
时运行。发生这种情况时,枚举将在前两次迭代后停止,因此ObservableWWW.Get
将仅调用两次