Цепные продолжения вместе с использованием .NET Reactive - PullRequest
4 голосов
/ 21 января 2011

Вопрос новичка Rx. Я хочу написать метод, подобный следующему:

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

Основная идея: сохранить данный объект, обработать результаты в моем «внутреннем» продолжении, а затем разрешить выполнение «внешнего» продолжения вызывающего. Другими словами, я хочу связать два продолжения вместе, чтобы второе не выполнялось, пока не закончится первое.

К сожалению, приведенный выше код не компилируется, поскольку внутреннее продолжение должно возвращать void, а не IObservable. Плюс, конечно, возвращение наблюдаемого модуля из лямбды - это не то же самое, что возвращение его из содержащей функции, что мне действительно нужно сделать. Как я могу переписать этот код так, чтобы он правильно возвращал наблюдаемый модуль? Спасибо.

1 Ответ

2 голосов
/ 21 января 2011

Самое простое решение - использовать SelectMany

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