我正在将反应式编程应用于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);
请回复。 谢谢。
答案 0 :(得分:1)
WhenAll(this IEnumerable> sources)已经做到了。我怀疑 real 问题是如何从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
仅被调用两次