runceel / ReactiveProperty

ReactiveProperty provides MVVM and asynchronous support features under Reactive Extensions. Target frameworks are .NET 6+, .NET Framework 4.7.2 and .NET Standard 2.0.
MIT License
903 stars 101 forks source link

ReadOnlyReactivePropertyのsourceで発生した例外について質問 #225

Closed p4j4dyxcry closed 3 years ago

p4j4dyxcry commented 3 years ago

いつもお世話になっております。 WPFにてReactivePropertyを利用させていただいております。 今回表題の件について質問させていただきたいのですが 例えば、ObservableなソースからReactivePropertyを生成する際に変換途中で例外が発生した場合 ハンドルされていない例外であればスローされると思っていたのですが( 実行スレッドが同一という仮定の場合) 実際にはReadOnlyReactiveProperty においてはスローされないみたいでした。 以下にコード例を示します。

// ハンドルされていない例外がスローされる
_ = Observable.Return(Unit.Default)
              .Do(_ => throw new Exception())
              .ToReactiveProperty();

// 例外はスローされない
_ = Observable.Return(Unit.Default)
              .Do(_ => throw new Exception())
              .ToReadOnlyReactiveProperty();

// ハンドルされていない例外がスローされる
_ = Observable.Return(Unit.Default)
              .Do(_ => throw new Exception())
              .Subscribe();

この様な挙動は想定通りでしょうか?

※ReactiveProperty 7.6.1にて動作確認を行っています。

2021/01/22 : 追記

runceel commented 3 years ago

変更の理由などを忘れていたので返事が遅くなってすいません。 現状の仕様としては ReadOnlyReactiveProperty のときは例外が発生したとき(OnError のとき)は何もしない仕様になっています。

https://github.com/runceel/ReactiveProperty/blob/main/Source/ReactiveProperty.NETStandard/ReadOnlyReactiveProperty.cs#L184

この変更は v7 に上がるタイミングで ReadOnlyReactiveProperty の性能を少し改善したときの変更で起きています。 例外が起きたかどうか知りたいですか?

p4j4dyxcry commented 3 years ago

返答ありがとうございます。 質問したいと意図としましては、とあるプロジェクトでReactiveProperty6.2から7.6.1へのアップデートを検討しており、その過程で先行して置き換えの検証をしていたところ本件に起因するトラブルが報告されましたので質問させていただいた次第です。

仕様ということで承知しました。 開発中のGUIアプリケーションが意図しない例外が発生している状態で継続して実行されるのは不本意なので例外の発生で早期に異常を知らせたい部分ではReadOnlyReactivePropertyではなく、ReactivePropertyで代替、もしくは例外ハンドラを差し込む形に変更するのを考えています。(より良い案があればご教授願いたいです。)

runceel commented 3 years ago

v6 のものに基本合わせて、オプションで握りつぶせるような感じにしてみました。 PRのテストコードみたいな動きになります。

このIssueのサンプルコードをそのまま使わせてもらいました。

p4j4dyxcry commented 3 years ago

ご対応ありがとうございました。

runceel commented 3 years ago

ちょっとTwitterでこの変更困る人がいるか聞いてみてから最終的にマージするかどうか確認してみようと思います。