UniRx: Take と First と Single
Take
, First
, Single
の各オペレータは、ストリームに流れる値を取り出します。
オペレータに応じて、それぞれストリームにいくつ値がながれるか、期待する個数が異なります。
Take
は、ストリームの最初の N 個を取り出します(N は引数で指定)。不足があっても構いません。First
は、ストリームの最初の値を取り出します。ストリームには、ひとつ以上の値が流れることを期待します。Single
は、ストリームの最初の値を取り出します。ストリームには、ちょうどひとつだけ値が流れることを期待します。
Take
のサンプル
void Start() { var s = Observable.Range(1, 3); s.Take(2).Debug().Subscribe(); // 2 個取り出す s.Take(5).Debug().Subscribe(); // 5 個取り出す }
実行結果です。
OnSubscribe OnNext(1) OnNext(2) OnCompleted() OnSubscribe OnNext(1) OnNext(2) OnNext(3) OnCompleted()
Take()
は引数で指定された個数だけ値を取り出しますが、不足分があっても構いません。
First
のサンプル
void Start() { var s = Observable.Range(1, 3).First(); s.Debug().Subscribe(); }
実行結果です。
OnSubscribe OnNext(1) OnCompleted()
- もし、ストリームに値が流れない場合は、「InvalidOperationException: sequence is empty」例外が生成されます。
Single
のサンプル
void Start() { var s = Observable.Return(100).Single(); s.Debug().Subscribe(); }
実行結果です。
OnSubscribe OnNext(100) OnCompleted()
- もし、ストリームに値が流れない場合は、「InvalidOperationException: sequence is empty」例外が生成されます。
- もし、ストリームにふたつ以上の値が流れる場合は、「InvalidOperationException: sequence is not single」例外が生成されます。