Observable.DoXxx()系のメソッドの挙動についてまとめました。
DoXxx()?
IObservable
- Do()
- DoOnSubscribe()
- DoOnCompleted()
- DoOnError()
- DoOnCancel()
- 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()の時に呼ばれる |