FirstAsync如何工作?

Bor*_*ens 6 c# system.reactive

在我不断追求吸吮的过程中,我试图理解Rx.net的FirstAsync()语法.大多数文档都是针对已弃用的文档.First()
如果我理解正确,它允许我在流中的第一个元素到达时立即启动流.

假设我有一个流myStream,我想启动一个获取第一个元素的流,并根据该元素启动一个流.就我而言,它将是一个流.
我希望它能做到这一点:

--- 1-2->
--- A --->

我该怎么做?

myStream.FirstAsync().Return(() => return "A"); // doesn't compile
Run Code Online (Sandbox Code Playgroud)

Shl*_*omo 7

我不知道为什么其他两个答案都说要.FirstAsync()返回Task(或者你应该打电话.Result).它不返回a Task,它返回一个IObservable<TSource>.可观测量是可以接受的,但它们不是任务.

要实现所需功能,请执行以下操作:myStream.FirstAsync().Select(_ => "A").

你也可以myStream.Take(1).Select(_ => "A").此FirstAsync版本与版本之间的区别在于,FirstAsync如果myStream在没有任何元素的情况下完成,则版本将抛出异常.Take(1)将完成没有错误.


Jac*_*eja 5

回答“ FirstAsync 是如何工作的? ”:

它返回一个新的IObservable<T>,其中包含:

  • 源流中的第一个项目(当它最终产生一个项目时),然后是一个完整的项目。

  • 或者,如果源流在没有生成项目的情况下完成,则会出现异常(通过 OnError),您需要使用Catch或 在您的Subscribe等中处理该异常。

如果您希望在源完成而不产生第一项时获得默认值而不是异常,请使用 FirstOrDefaultAsync