【Unity】【UniRx】Observable.DoXxx()系のメソッドの挙動まとめ

Observable.DoXxx()系のメソッドの挙動についてまとめました。

DoXxx()?

IObservableにはDoから始まるメソッドが複数定義されています。

  1. Do()
  2. DoOnSubscribe()
  3. DoOnCompleted()
  4. DoOnError()
  5. DoOnCancel()
  6. DoOnTerminate()

これらのうち1~4はわかりやすいです。

メソッド名 説明
Do() OnNext()のたびに呼ばれる
DoOnSubscribe() 購読された時に呼ばれる
DoOnCompleted() OnCompleted()の時に呼ばれる
DoOnError() OnError()の時に呼ばれる

5と6については挙動が名前から明らかではなかったので次節で調べてみました。

DoOnCancel()とDoOnTerminate()を検証

こんな感じで検証用のコードを書いて、Disposeしてみたりエラーにしてみたりしました。

Observable
    .Timer(System.TimeSpan.FromSeconds(3.0f))
    .DoOnCancel(() => Debug.Log("Canceled."))
    .DoOnTerminate(() => Debug.Log("Terminated."))
    .Subscribe();

結果、それぞれ次のような挙動であることがわかりました。

メソッド名 説明
DoOnCancel() Disposeされた時に呼ばれる
DoOnTerminate() OnCompleted()の時、またはOnError()の時に呼ばれる

まとめ

まとめると次の通りになります。

メソッド名 説明
Do() OnNext()のたびに呼ばれる
DoOnSubscribe() 購読された時に呼ばれる
DoOnCompleted OnCompleted()の時に呼ばれる
DoOnError OnError()の時に呼ばれる
DoOnCancel() Disposeされた時に呼ばれる
DoOnTerminate() OnCompleted()の時、またはOnError()の時に呼ばれる