To a single collection
为了避免在push和pull之间摇摆,可以使用下面4种方法将整个list返回在一个消息之中。它们都具有相同的语意,只是产生的数据格式不同。类似于IEnumerable<T>操作,返回值类型不同点在于保留了异步行为的顺序。
ToArray and ToList
两个方法都接受一个可观测物队列并分别将其打包到一个数组或List<T>中。可观测物队列一旦完成,数组或List<T>将被作为结果push(无阻塞)。
Output:
Subscribed
Received array
0
1
2
3
4
Completed
这些方法仍然将返回可观测物队列,我们可以使用自己的OnError handler处理错误。注意,源队列将被打包到一个单一的消息,最终要么得到整个队列要么得到错误。如果源产生值然并在之后错误,将收不到任何值,所有的4个操作(ToArray、ToList、ToDictionary和ToLookup) 都像这样处理错误。
ToDictionary and ToLookup
作为数组和list的代替,ToDictionary、ToLookup方法可以把一个可观测物队列打包成字典或lookup(https://msdn.microsoft.com/en-us/library/bb460184(v=vs.110).aspx)。这2个方法都和ToArray、ToList方法有一样的语意,它们都将转换结果作为一个值来返回,并具有相同的错误处理机制。
ToDictionary扩展方法的重载如下:
ToLookup扩展方法的重载如下:
ToDictionary和ToLookup都需要一个可以让每个值都能与它的key相对应的方法;此外,ToDictionary方法重载强制所有的key都必须是唯一的,如果发现重复的key,它将抛出DuplicateKeyException。 ILookup<TKey, TElement>被设计成多个值有同一个key。如果你的key需要对应多个值,ToLookup是个不错的选择。
暂无关于此日志的评论。