使用.NET Reactive链接连续

时间:2011-01-21 15:40:20

标签: continuations system.reactive subscribe

新手Rx问题。我想写一个类似如下的方法:

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

基本思想是:保存给定对象,在“内部”延续中处理结果,然后允许调用者的“外部”延续执行。换句话说,我想将两个连续符号链接在一起,这样第二个连续符号就不会执行,直到第一个连续符号完成。

不幸的是,上面的代码无法编译,因为内部延续必须返回void而不是IObservable。另外,当然,从lambda返回一个可观察单元与从包含函数返回它是不一样的,这是我真正需要做的。如何重写此代码以便正确返回可观察单元?感谢。

1 个答案:

答案 0 :(得分:2)

最简单的解决方案是使用SelectMany

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