Skip to content

Blocking Observable Operators

mcxiaoke edited this page Jul 19, 2015 · 50 revisions

这一节解释 BlockingObservable 的子类. 一个阻塞的Observable 继承普通的Observable类,增加了一些可用于阻塞Observable发送的数据的操作符。

要将一个普通的Observable 转换为 BlockingObservable,可以使用 Observable.toBlocking( ) 方法或者BlockingObservable.from( ) 方法。

  • forEach( ) — 对Observable发送的每一项数据调用一个方法,会阻塞直到Observable完成
  • first( ) — 阻塞直到Observable发送了一个数据,然后返回第一项数据
  • firstOrDefault( ) — 阻塞直到Observable发送了一个数据或者完成,返回第一项数据,或者返回默认值
  • last( ) — 阻塞直到Observable完成,然后返回最后一项数据
  • lastOrDefault( ) — 阻塞直到Observable完成,然后返回最后一项的数据,或者返回默认值
  • mostRecent( ) — 返回一个总是返回Observable最近发送的数据的iterable
  • next( ) — 返回一个iterable,会阻塞直到Observable发送了另一个值,然后返回那个值
  • latest( ) — 返回一个iterable,会阻塞直到或者除非Observable发送了一个iterable没有返回的值,然后返回这个值
  • single( ) — 如果Observable完成时只发送了一个值,返回那个值,否则抛出异常
  • singleOrDefault( ) — 如果Observable完成时只发送了一个值,返回那个值,否则否好默认值
  • toFuture( ) — 将Observable转换为一个Future
  • toIterable( ) — 将一个发送数据序列的Observable转换为一个Iterable
  • getIterator( ) — 将一个发送数据序列的Observable转换为一个Iterator

伴随这个解释还有一个修改版的弹珠图,这里就是表示阻塞Observable的弹珠图:

BlockingObservables

参见:

附录:相似的阻塞和非阻塞操作符列表

操作符 执行结果 Rx.NET等价操作
发送多个数据的Observable 发送单个数据的Observable 不发送数据的Observable
Observable.first 第一项 单个数据 该元素不存在 firstAsync
BlockingObservable.first 第一项 单个数据 该元素不存在 first
Observable.firstOrDefault 第一项 单个数据 默认数据 firstOrDefaultAsync
BlockingObservable.firstOrDefault 第一项 单个数据 默认数据 firstOrDefault
Observable.last 最后一项 单个数据 该元素不存在 lastAsync
BlockingObservable.last 最后一项 单个数据 该元素不存在 last
Observable.lastOrDefault 最后一项 单个数据 默认数据 lastOrDefaultAsync
BlockingObservable.lastOrDefault 最后一项 单个数据 默认数据 lastOrDefault
Observable.single 非法参数 单个数据 该元素不存在 singleAsync
BlockingObservable.single 非法参数 单个数据 该元素不存在 single
Observable.singleOrDefault 非法参数 单个数据 默认数据 singleOrDefaultAsync
BlockingObservable.singleOrDefault 非法参数 单个数据 默认数据 singleOrDefault
Clone this wiki locally