c# - 有没有办法在 Observable.WhenAll() 中指定可变数量的 Observable?
问题描述
我正在将反应式编程应用于 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(this IEnumerable> sources)已经这样做了。我怀疑真正的问题是如何从 URL 列表中生成一些 observables。一种方法是使用 LINQ :
var urlObservables=URLs.Select(url=>ObservableWWW.Get(url));
var allAsOne= Observable.WhenAll(urlObservables);
更新
正如 Felix Keil 评论的那样,如果 OP 只想观察其中的几个可观察对象怎么办?这是 LINQ 的Take()的工作,应用于 URL 列表或 observables 列表,例如:
var someObservables=URLs.Take(2).Select(url=>ObservableWWW.Get(url));
甚至
var someObservables=URLs.Select(url=>ObservableWWW.Get(url)).Take(2);
LINQ 的惰性求值意味着运算符仅在someObservables
被枚举时才会运行。发生这种情况时,枚举将在前两次迭代后停止,因此ObservableWWW.Get
只会被调用两次
推荐阅读
- javascript - 将时间间隔(例如:hh24:mm-hh24:mm)从一个时区转换为另一个(javascript)
- python - Python:将图形的纵横比设置为1
- python - 如何使用 selenium 从字符串中提取数字?
- android - Firebase Analytics 如何计算(唯一)用户
- python-3.x - 如何打印嵌套字典元素?
- javascript - 如何在 xstate 中重用状态转换?
- google-chrome-devtools - 在计算机之间导入/导出 Chrome devtools 断点和设置
- python - wxPython程序扫描
- kubernetes - 如何在 kubernetes 服务定义 yaml 中指定不相等的选择器?
- wpf - 在动态填充的 DataGrid WPF 上禁用文本换行