UniRx: Empty

Observable.Empty() は、Subscribe() するとすぐに完了を通知します。

using UniRx;
using UnityEngine;

public class Main : MonoBehaviour
{   
    void Start()
    {
        var s = Observable.Empty<Unit>();
        s.Subscribe(e => Debug.Log("e: " + e), () => Debug.Log("OnCompleted"));
    }
}

実行結果です。

OnCompleted

Observable.Empty を Take する

void Start()
{
  var s = Observable.Empty<Unit>().Take(5);
  s.Subscribe(e => Debug.Log("e: " + e), () => Debug.Log("OnCompleted"));
}

実行結果です。

OnCompleted

Take するときの不足分に対する挙動は、LinqTake と同じですね。

Observable.Empty を Skip する

void Start()
{
  var s = Observable.Empty<Unit>().Skip(5);
  s.Subscribe(e => Debug.Log("e: " + e), () => Debug.Log("OnCompleted"));
}

実行結果です。

OnCompleted

Take と同様の振る舞いです。

Observable.Empty を First する

void Start()
{
  var s = Observable.Empty<Unit>().First();
  s.Subscribe(e => Debug.Log("e: " + e), () => Debug.Log("OnCompleted"));
}

実行結果です。

InvalidOperationException: sequence is empty

シーケンスが空のため、InvalidOperationException 例外が生成されました。

Observable.Empty を FirstOrDefault する

void Start()
{
  var s = Observable.Empty<int>().FirstOrDefault();
  s.Subscribe(e => Debug.Log("e: " + e), () => Debug.Log("OnCompleted"));
}

実行結果です。

e: 0
OnCompleted

default(int) が通知されます。

参考