是否存在内置库函数可接收Func<T>并返回IObservable<T>?
现成方案:用
Observable.Defer实现 你要的功能完全可以用Rx.NET自带的方法组合实现,无需自己编写自定义代码,效果和你给出的逻辑完全一致:
Observable.Defer(() => Observable.Return(factory()))
原理说明:
Defer会推迟到每次订阅发生时才执行传入的lambda- 如果
factory()执行时抛出异常,Defer会自动将异常转为IObservable<T>的OnError通知,和你代码里的Observable.Throw<T>(ex)效果一致 - 若
factory()正常返回结果,就通过Observable.Return发出OnNext+OnCompleted通知,完全匹配你的自定义逻辑
额外补充:如果需要让factory()在后台异步执行,可以用Observable.FromAsync(factory),但它会开启后台线程;而你原代码是同步执行逻辑,所以Defer+Return是最贴合需求的开箱即用方案。
内容的提问来源于stack exchange,提问作者Luboš Hemala
相关产品推荐
相关产品推荐

