Skip to content

エラーハンドリング(Error)オペレーター

概要

R3 は従来の Reactive ライブラリとは異なる 二層式エラーモデル を採用しています。

通知種別シーケンスへの影響
OnErrorResume非致命的エラーシーケンスは 継続 する。後続の要素を引き続き受け取れる
OnCompleted(Result.Failure)致命的エラーシーケンスは 終了 する。以降の要素は発行されない

従来の OnError に相当するのは OnCompleted(Result.Failure) です。一方、OnErrorResume は「エラーは発生したが、ストリーム自体はまだ有効である」ことを表します。この二層構造により、一時的な障害と回復不能な障害を明確に区別して処理できます。

オペレーター一覧

オペレーター説明
Catchソースが失敗で完了した際に、代替 Observable に切り替える
IgnoreOnErrorResumeOnErrorResume 通知を無視して処理を継続する
OnErrorResumeAsFailure最初の OnErrorResume を致命的エラーに変換してシーケンスを終了する

比較表

特性CatchIgnoreOnErrorResumeOnErrorResumeAsFailure
対象とするエラー致命的エラー (OnCompleted(Result.Failure))非致命的エラー (OnErrorResume)非致命的エラー (OnErrorResume)
エラー時の動作代替 Observable に切り替えエラーを無視して継続致命的エラーに昇格して終了
シーケンスの継続代替シーケンスで継続そのまま継続終了する
主な用途フォールバック・リカバリ一時的なエラーの抑制最初のエラーで即座に停止

使い分けガイド

致命的エラーから回復したい場合

ソースシーケンスが OnCompleted(Result.Failure) で終了した際に、別の Observable に切り替えて処理を継続したい場合は Catch を使用します。例えば、メインのデータソースが失敗した場合にキャッシュやデフォルト値で代替する場面に適しています。

非致命的エラーを無視したい場合

OnErrorResume で通知される一時的なエラーを無視し、後続の要素だけを処理したい場合は IgnoreOnErrorResume を使用します。ログ出力が必要な場合は Action<Exception> を受け取るオーバーロードを利用できます。

非致命的エラーを致命的エラーに昇格させたい場合

最初の OnErrorResume が発生した時点でシーケンスを終了させたい場合は OnErrorResumeAsFailure を使用します。非致命的エラーを失敗完了として扱いたい場面に適しています。