我经常发现自己必须将简单的同步调用或函数转换为可观察兼容的调用或函数,这样我才能更轻松地编写可观察的流。
例如,我的最后一个:
public IObservable<Unit> UnlinkFile(FileRef fileRef) {
try {
File.Delete(fileRef.Path);
return Observable.Return(Unit.Default);
} catch (Exception ex) {
return Observable.Throw<Unit>(ex);
}
}
现在我可以做:
.SelectMany(_ => filesystem.UnlinkFile(fileRef))
我可以使用.Do
,但.Do
的问题在于它不会将经典的 SEH 异常抛回它所属的可观察对象中。
有没有更好的模式来实现这一点?我们有哪些选择?我应该更好地使用Observable.Start()
,Observable.Create()
或其他东西来获得冷观察吗?
有没有另一种语法可以避免上述样板?
我会使用Observable.Start(() => File.Delete(fileRef.Path))
.
您只需要确保一次有一个可观察对象的订阅者。