考虑一个返回的方法DoSomething()
:
IObservable<IEnumerable<T>> DoSomething()
IObservable<T> DoSomething()
考虑到两者:
答案 0 :(得分:2)
考虑此Observable.Buffer
extension method的签名:
IObservable<IList<TSource>> Buffer<TSource>(IObservable<TSource> source, int count)
显然,如果结果被展平为IObservable<TSource>
,它将不会非常有用。
正如你自己所说,IObservable<T>
和IObservable<IEnumerable<T>>
在概念上是不同的。
答案 1 :(得分:1)
IObservable<IEnumerable<T>>
在语义上与IObservable<T>
不同。
IObservable<IEnumerable<T>>
表示报告零个或多个值的零个或多个时刻。
IObservable<T>
表示报告单个值的零个或多个时刻。
然后可以使用前者来表示时间点之间的活动,并且返回空的可枚举将积极地表示自上一个值以来的nil活动。后者无法明确这样做。
因此,这两种形式可用于表示两种不同的现实方式或报告值。
答案 2 :(得分:0)
如果您的方法意味着什么,那么返回IObservable<IEnumerable<T>>
并没有错。缓冲区是一个有意义的例子 - 任何有批处理的东西都有意义。如果您有接受批量订单请求的服务,则IObservable<IEnumerable<Order>>
可能有效。你可以压扁它,这也可能是有效的。
这取决于批处理/缓冲区本身的概念是否与您的方法应该执行的操作不可分割。如果您的方法碰巧使用缓冲区来实现其目标,但该方法本质上不是批处理操作,那么展平Observable可能会更直观。