请任何人告诉我Rx中的SelectMany运算符是如何工作的.我也不知道
Linq中有关此运算符的更多信息.
请在一个简单示例的帮助下解释这一点,以及在什么情况下我们将在Rx中使用此运算符.
解决方法
SelectMany将投影和展平结合为一个步骤.假设您有许多列表,例如{{1,2},{3,4,5},{6,7}},您可以使用SelectMany将其展平为单个列表,如:{1,2,3,5,6,7}
Rx中的SelectMany可以将多个序列展平为一个可观察的(实际上有几个重载).
对于一个实际的例子,假设你有一个函数DownloadFile(filename),它给你一个Observable,它在文件完成下载时产生一个值.你现在可以写:
string[] files = { "http://.../1","http://.../2","http://.../3" }; files.ToObservable() .SelectMany(file => DownloadFile(file)) .Take(3) .Subscribe(c => Console.WriteLine("Got " + c),()=> Console.WriteLine("Completed!"));
DownloadFile的所有3个可观察对象都被展平为一个,因此您可以等待3个值到达以查看是否已完成所有下载.