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)
我不知道为什么其他两个答案都说要.FirstAsync()返回Task(或者你应该打电话.Result).它不返回a Task,它返回一个IObservable<TSource>.可观测量是可以接受的,但它们不是任务.
要实现所需功能,请执行以下操作:myStream.FirstAsync().Select(_ => "A").
你也可以myStream.Take(1).Select(_ => "A").此FirstAsync版本与版本之间的区别在于,FirstAsync如果myStream在没有任何元素的情况下完成,则版本将抛出异常.Take(1)将完成没有错误.
回答“ FirstAsync 是如何工作的? ”:
它返回一个新的IObservable<T>,其中包含:
源流中的第一个项目(当它最终产生一个项目时),然后是一个完整的项目。
或者,如果源流在没有生成项目的情况下完成,则会出现异常(通过 OnError),您需要使用Catch或 在您的Subscribe等中处理该异常。
如果您希望在源完成而不产生第一项时获得默认值而不是异常,请使用 FirstOrDefaultAsync
| 归档时间: |
|
| 查看次数: |
3026 次 |
| 最近记录: |