Rx:在冷可观察量中包装简单的同步调用

时间:2018-02-03 11:55:25

标签: c# observable system.reactive

我经常发现自己必须将简单的同步调用或函数转换为可观察的兼容调用,因此我可以更容易地编写可观察的流。

例如,我的最后一个:

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中。

有没有更好的模式来实现这一目标?我们有什么选择?我应该更好地使用Observable.Start()Observable.Create()或其他东西来获得寒冷的观察结果吗?

还有其他语法可以避免上述样板吗?

1 个答案:

答案 0 :(得分:2)

我会使用Observable.Start(() => File.Delete(fileRef.Path))

您必须确保一次有一个订阅者才能观察到。