【发布时间】:2017-07-28 12:51:50
【问题描述】:
使用 Rx 的 observable 流,有没有一种有效的方法来获取第一项,完成源 observable,但是如果第二项到达则抛出异常? 听起来不太适合使用 Rx,但是有没有巧妙的方法来处理它?
【问题讨论】:
-
不,没有好的方法可以做到这一点。你不能在一个值之后完成源 observable,然后期望另一个值来。如果你完成了 observable,那就是它——它已经完成了。
-
我也很怀疑。不符合图案。但是,我正在考虑一种模式,您可以在其中获取第一个项目并存储在某个地方,然后等待超时,然后再决定如果第二个项目到那时没有到达,则决定发出第一个项目。我只是看到太多情况,您在决定之前要提取数据库调用的整个结果集。这种模式不适用于热的可观察对象,但有点冷的对象,例如数据库游标。
-
这应该很容易锻炼。
-
这越来越接近
var query = source.Publish(ss => ss.Take(1).Concat(Observable.Amb(Observable.Timer(TimeSpan.FromSeconds(1.0)).Select(x => -1), ss.Take(1).Concat(Observable.Throw<int>(new Exception())))));。
标签: system.reactive rx-py