IEnumerable <T> .Count()实际上适用于IObservable <T>吗?

ras*_*asx 0 c# system.reactive observer-pattern

有没有一个例子向我展示Observable.Count<TSource> Method实际如何运作?我想出的例子似乎返回一个包含在observable中的计数而不是预期的计数.

例如,我希望1从这里返回:

System.Diagnostics.Debug.WriteLine((Observable.Return<string>("Hello world!")).Count());
Run Code Online (Sandbox Code Playgroud)

将来会1被退回(因为,毕竟它是一个异步序列)?或者我错过了一些基本的东西?在撰写本文时,我实际上假设只要结果被推出,.Count()它将返回结果T并随着时间的推移而增长.真?是.

Ana*_*tts 5

Rx中的聚合运算符与LINQ中的运算方式略有不同 - 它们不会立即返回值,它们返回未来结果(即,只有Observable完成后我们才能知道最终的Count是什么).

所以,如果你写:

Observable.Return("foo").Count().Subscribe(x => Console.WriteLine(x));
>>> 1
Run Code Online (Sandbox Code Playgroud)

因为,毕竟它是一个异步序列

这实际上并不完全正确.在这里,只要有人打电话,一切都将立即运行Subscribe.上面的代码没有任何异步,没有额外的线程,一切都发生在订阅上.