Rx.NET中的Wait运算符是做什么的?
在Rx.NET库V2.2.5,有一个名为Wait
运营商被定义为这样:Rx.NET中的Wait运算符是做什么的?
public virtual TSource Wait<TSource>(IObservable<TSource> source)
无论是class library reference on MSDN也不this page提到这个操作符。
从看它的实现来看,这太麻烦了,我猜测它等待observable产生它的所有元素,并返回最后一个元素,如果observable有任何元素,如果没有,它返回default(TSource)
。但我不确定。
如果这是正确的,那么它与LastOrDefaultAsync
有什么不同?
它实际上做了什么?
智能感知文件似乎相当准确
等待观察的过程完成并返回序列的最后一个元素。 如果序列以OnError通知终止,则抛出异常。
因此,运营商将阻塞调用线程(YUCK!),直到序列完成后产生的最后一个值。
LastOrDefaultAsync
与此相反,返回IObservable<T>
,因此不会阻塞。
这些方法的文档位于Observable
类中,而不是查询语言实现。
等待可观测序列完成并返回序列的最后一个元素。
如果序列以OnError通知终止,则抛出异常。
它本质的Last<TSource>()
的代名词。
谢谢。在发布了我正在看错地方的问题后,我才意识到。 –
的问题提供Wait
的描述是不完全正确。
下面是Wait
和LastOrDefaultAsync
之间的相似性:
- 两个逻辑等待接收在源可观察到的所有的值。但正如Lee Cambell在他的回答中指出的那样,
Wait
会阻止当前线程,而LastOrDefaultAsync
则不会。
这里是差异Wait
和LastOrDefaultAsync
之间的总结:
如果在可观察序列中没有元素,
Wait
抛出异常;LastOrDefault
返回default(TSource)
。如果观察到的观察期间发生异常,
Wait
通过调用observer.OnError
报告异常,但随后也抛出该异常随即;LastOrDefaultAsync
仅通过在所有订阅的观察者上调用observer.OnError
来报告例外情况。但是,在错误的情况下,在这两种情况下,观察都停止了。
随附的源代码(或甚至与上述二值分布或者通过的NuGet或通过MSI安装)Rx之中的XML文档由此说明:
等待可观察序列完成并返回序列的最后一个 元素。如果序列以OnError 通知终止,则抛出异常。
例外
抛出ArgumentNullException
如果source
为null。
如果source
序列为空,则抛出InvalidOperationException
。
谢谢。你击败了我。发布问题后,我立即找到了答案。 –