日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。番外編「System.Reactive.Linq.Observableのメソッド一覧とメモ」はじめに今回は、エラーに対応するためのメソッドの1つOnErrorResumeNextというメソッドについてみていきます。OnErrorResumeNextメソッドここでは、OnErrorResumeNextメソッドについて説明します。このメソッドはIObservableのシーケンスで例外が発生した際に、どのようにIObservableのシーケンスを再開するのかを指定します。IObservableの拡張メソッドとして定義されているものは「Catchメソッド」で説明したものと同じように、例外発生時に別のIObservableで処理を続けるということが出来ます。コード例を下記に示します。Console.WriteLine("OnCompleted"));最初にThrowメソッドを使って例外を発生させています。それに対してOnErrorResumeNextメソッドを使ってOKという文字列を流し込んでいます。実行結果を以下に示します。OKOnCompletedThrowメソッドで発生された例外は、Subscribeまで届いていないことが確認できます。このように例外発生時に、別のIObservableで処理を再開することが出来ます。因みにCatchメソッドでは例外の種類を指定できましたがOnErrorResumeNextでは例外の種類を指定できないので、この点だけを見るとCatchメソッドのほうが柔軟な対応が出来ます。IObservable[]を受け取るオーバーロードが定義されています。メソッドのシグネチャを下記に示します。sources);このメソッドを使うと、最初のIObservableで例外が発生したら、次のIObservableで再開して、そこでも例外が発生したら、次のIObservableで再開して・・・ということが実現できます。コード例を下記に示します。“OK”}という文字列の配列から、IEnumerable>へ変換してOnErrorResumeNextを呼び出しています。内容としては”OK”という文字列以外が渡ってきた場合はObservable.Throwメソッドを使って例外を発生させるIObservableを作成しています。実行結果を以下に示します。Abortの文字列から生成される例外は全て無視してOKがSubscribeに渡ってきていることが確認できます。動作確認のためOKの文字列の場所を下記のように2番目にくるように書き直します。Console.WriteLine("OnCompleted"));実行結果を以下に示します。}OnCompleted今度はindexが1になっていることが確認できます。全て例外で終わった場合(このプログラム例では最初の文字列の配列にOKが無い場合)は以下のようにOnCompletedになります。OnCompletedこれまでのサンプルではOnErrorResumeNextの挙動を確認するために単純なプログラムを書いていましたが、このメソッドを使うと例えば、プライマリのサーバに対して非同期にデータを要求して例外が発生した場合にはセカンダリのサーバに対してデータを要求するというプログラムを書くことができます。C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。Blogの内容は個人の見解であり、所属する企業を代表するものではありません。)はてなブログをはじめよう!okazukiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。