请任何人告诉我SelectMany
Rx 中的操作员是如何工作的。我也不知道更多关于 Linq 中的这个运算符。
请借助一个简单的示例来解释这一点,以及在什么情况下我们将在 Rx 中使用此运算符。
请任何人告诉我SelectMany
Rx 中的操作员是如何工作的。我也不知道更多关于 Linq 中的这个运算符。
请借助一个简单的示例来解释这一点,以及在什么情况下我们将在 Rx 中使用此运算符。
SelectMany 只是:
source.Select(selector).Merge();
换句话说,它将源输入选择为 Observable 流,然后将每个 Observable 展平为结果流。
SelectMany
将投影和展平结合到一个步骤中。假设您有许多列表{ {1, 2}, {3, 4, 5}, { 6, 7 } }
,可以用来SelectMany
将其展平为单个列表,例如:{ 1, 2, 3, 4, 5, 6, 7}
SelectMany
在 Rx 中可以将多个序列展平为一个 observable(实际上有几个重载)。
举个实际的例子,假设你有一个函数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!"));
的所有 3 个 observableDownloadFile
都被扁平化为一个,因此您可以等待 3 个值到达以查看所有下载已完成。
我发现这个简短的视频有助于理解 SelectMany for Rx(以及作为大理石图的更高级使用):http ://channel9.msdn.com/Blogs/J.Van.Gogh/Reactive-Extensions-API-in-depth -SelectMany