4

初心者Rxの質問です。以下のようなメソッドを書きたいと思います。

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 を返す必要があるため、上記のコードはコンパイルされません。さらに、もちろん、ラムダから監視可能な Unit を返すことは、それを含む関数からそれを返すことと同じではありません。これは、私が実際に行う必要があることです。観測可能なユニットを正しく返すように、このコードを書き直すにはどうすればよいですか? ありがとう。

4

1 に答える 1

2

最も簡単な解決策は、SelectManyを使用することです

public IObsevable<Unit> Save(object obj)
{
   var saveFunc = Observable.FromAsyncPattern(...);
   return saveFunc(obj).SelectMany(result =>
   {
      Process(result);
      return Observable.Return(new Unit());
   });
}
于 2011-01-21T15:51:21.533 に答える