FirstAsync 如何工作



在我永恒的追求中,我试图理解Rx.net的FirstAsync()语法。大多数文档适用于已弃用的First()
如果我理解正确,它允许我在流中的第一个元素到达时立即启动流。

假设我有一个流myStream,我想启动一个流,该流采用第一个元素并基于该元素启动流。就我而言,它将是一个流。
我希望它这样做:

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

我该怎么做?

myStream.FirstAsync().Return(() => return "A"); // doesn't compile
我不知道

为什么其他两个答案说.FirstAsync()返回一个Task(或者你应该称.Result(。它不返回Task,它返回一个IObservable<TSource>。可观察量是可等待的,但它们不是任务。

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

你也可以做myStream.Take(1).Select(_ => "A").此版本与FirstAsync版本的区别在于,如果myStream完成而没有任何元素,则FirstAsync版本将引发异常。 Take(1)将完成,没有错误。

在回答">FirstAsync 如何工作?"时:

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

  • 源流中的第一个项目(当它最终生成一个时(,后跟一个完整的项目。

  • 或者,如果源流完成而不生成项目,异常(通过 OnError(,您需要使用CatchSubscribe等进行处理。

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

相关内容

  • 没有找到相关文章

最新更新