.NET 3.5 にて
Install-Package Rx-Main -Version 1.0.11226
System.Reactive を利用しています。
A,B,C,ZをそれぞれCold Observableとしたときに
A -> B-> C のObservableチェインで成否に関わらず、最後に必ずZの実行を保証したい。
Zは非同期で Zの完了を待って SubsribeのOnComplete/OnErrorを処理したい。
A .SelectMany( n => B) .SelectMany( n => C) .?????(()=>{ //後始末を実行した後で OnComplete/OnErrorを処理したい }) .Subscribe( n => {}, error => {}, () =>{ })
後始末処理はFinallyを使った場合、OnCompleteとOnErrorの後に処理されてしまいます。
どういう書き方ができますでしょうか。
Subscribeをネストさせた書き方は避けたいです。
###避けたいコード
Observable.Crate( observer => { A .SelectMany( n => B) .SelectMany( n => C) .Finally(()=>{ z.Finally(()=> { Subscribeのキャッシュで observer.OnNext/OnErrorを発火 } }) .Subscribe( n => { //nをキャッシュ }, error => { //errorをキャッシュ }, () =>{ }); return Disposable.Empty; }) .Subscribe( n => {}, error => {}, () =>{ });
###Finallyを使いたくない理由
Subscribeにて、どういう処理がされるのか分からず(ShowDialogなど)、後始末が遅れてしまうのを避けたい
###ネストしたくない理由
単純にかっこ悪いので。
Observableを繋いで新しいObservableを生成することがRxの醍醐味で
Subscribeにて1回イベントストリームが流れるのがColdなので、
Subscribeを何回も内部で行うのは、Rxの思想に反すると思うから。

あなたの回答
tips
プレビュー