2011-01-21 54 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()); 
     }); 
} 

的基本思路是:保存給定對象,過程在我的「內部」延續的結果,然後讓來電者的「外」的延續執行。換句話說,我想將兩個連續鏈接在一起,以便在第一個連續完成之前不會執行第二個連續。

不幸的是,上面的代碼不能編譯,因爲內部延續必須返回void而不是IObservable。另外,當然,從lambda返回一個可觀察單元不同於從包含函數返回它,這正是我真正需要做的。我該如何重寫這段代碼才能正確返回可觀察單元?謝謝。

回答

2

最簡單的解決方案是使用的SelectMany

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