IObservable.Catch 可以继续使用相同的可观察值吗

发布于 2024-11-25 17:47:42 字数 245 浏览 0 评论 0原文

假设 a 有一个 IObservable:

IObservable<long> obs = ...;

我可以执行以下操作来保证 observable 永远不会停止吗?

IObservable<long> resilientObs = obs.Catch(obs);

因此,当捕获异常时,请继续执行生成异常的相同序列。

Suppose a have an IObservable:

IObservable<long> obs = ...;

Can I do the following to guarantee that the observable will never ever stop?

IObservable<long> resilientObs = obs.Catch(obs);

So when an exception is caught, continue with the same sequence that generated the exception.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

子栖 2024-12-02 17:47:42

你只能用 Cold observable(即每次返回一个新序列的 Observable)来做到这一点,

obs.Retry();

但即使如此,你也没有“恢复”一个 Observable,你只是重新启动它。

如果你想维持持久连接(例如,一个因错误而终止的 Web 套接字),你需要一个工厂函数 + Defer:

Observable.Defer(() => createNewObservable())
    .Retry();

为了给你更好的建议,你需要告诉我们 obs 的本质以及什么你正在尝试做的事。

You can only do this with a Cold observable (i.e. an Observable that returns a new sequence every time)

obs.Retry();

But even then, you're not "resuming" an Observable, you're just restarting it.

If you wanted to maintain a persistent connection (say, a web socket that gets terminated because of an error), you need a factory function + Defer:

Observable.Defer(() => createNewObservable())
    .Retry();

To give you better advice, you need to tell us the nature of what obs is and what you're trying to do.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文