2011-01-21 27 views
4

初心者質問。私は、次のような方法を書きたい:.NET Reactiveを使用して連鎖を連鎖させる

public IObsevable<Unit> Save(object obj) 
{ 
    var saveFunc = Observable.FromAsyncPattern(...); 
    saveFunc(obj).Subscribe(result => 
     { 
     Process(result); 
     return Observable.Return(new Unit()); 
     }); 
} 

基本的な考え方は次のとおりです。実行するために、発信者の「外側」の継続を許可し、その後、私の「内側」継続で結果プロセス、指定されたオブジェクトを保存します。言い換えれば、2つの連続を連鎖して、最初のものが終了するまで2つ目の連続が実行されないようにしたいのです。

内部継承がIObservableではなくvoidを返す必要があるため、残念ながら、上記のコードはコンパイルされません。もちろん、観測可能な単位をラムダから戻すことは、実際に行う必要がある包含する関数から返すことと同じではありません。観測可能ユニットを正しく返すように、このコードをどのように書き直すことができますか?ありがとう。

答えて

2

最も簡単な解決策は、SelectMany

public IObsevable<Unit> Save(object obj) 
{ 
    var saveFunc = Observable.FromAsyncPattern(...); 
    return saveFunc(obj).SelectMany(result => 
    { 
     Process(result); 
     return Observable.Return(new Unit()); 
    }); 
} 
を使用することです