我個人會避免Do語句。
您可以創建投影。
在這種投射我假設你想要做的處置目前內部序列的作用(也許從表中清理出當前記錄?)
MagicSource(StringsProvider)
.Select(inner=>inner.Finally(CleanUp))
.Switch()
.Subscribe(r => {/*...*/});
如果你想要做相同的,但針對內部序列的訂閱(而非處置),那麼你有更多的工作要做。我會創造對稱的運營商最後,Initially(Action)
public static class ObservableEx
{
public static IObservable<T> Initially<T>(this IObservable<T> source, Action onSubscribe)
{
return Observable.Create<T>(o=>{
try
{
onSubscribe();
return source.Subscribe(o);
}
catch (Exception ex)
{
o.OnError(ex);
return Disposable.Empty;
}
});
}
}
然後你可以使用它像這樣
MagicSource(StringsProvider)
.Select(inner=>inner.Initially(Prepare))
.Switch()
.Subscribe(r => {/*...*/});
哪件事上市還有就是你觀察到的是訂閱的枚舉? –
MagicSource是字符串查詢的外部部分,它根據給定的字符串選擇其對象,並將這些對象返回爲可觀察的。 –
如果這是一個新的可觀察對象,你可以調用它來獲取最近的?或者將它最新的一切都包含在內? –