首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重复调用RX订阅

重复调用RX订阅
EN

Stack Overflow用户
提问于 2015-01-15 04:18:56
回答 1查看 129关注 0票数 1

我当时正在做一个更大的项目,它广泛地使用了Rx。在一个特定的例子中,我注意到其中一个订阅抛出了一个异常。此时,我假设订阅将刚刚完成(有错误),因为我没有任何Retry()调用。然而,我看到的是订阅一再重试。

我试图在一个小例子中复制一个类似的案例,如下所示。我开了个断点

代码语言:javascript
复制
Console.WriteLine("!");

并预计在订阅失败后就会受到影响。但它从来没有达到。GetImportantValues().Subscribe只是一次又一次地被调用。

但我不明白为什么。我本以为抛出的异常会阻止订阅尝试。

如果抛出异常,我想修改下面的示例重试3次,然后就完全停止了。

代码语言:javascript
复制
using System;
using System.Reactive.Linq;

namespace RxTest
{
    class Program
    {
        static void Main(string[] args)
        {
            var ob1 = GetImportantValues().Subscribe(Console.WriteLine);

            Console.WriteLine("!");
            Console.ReadLine();
        }

        private static IObservable<int> GetImportantValues()
        {
            var obs = GetThem();
            return obs;
        }

        private static IObservable<int> GetThem()
        {
            //Do some work.  Would return a valid observable if everything is ok
            return Observable.Throw<int>(new Exception("test"));
        }        
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-15 04:31:58

不会被一次又一次的召唤。您可能只是在Visual中启用了破除第一次机会例外,每次尝试继续,它都会破坏相同的异常。如果您真的要继续这个过程,应用程序就会崩溃。

Observable.Throw打电话给OnError。您还没有在调用OnError时提供Subscribe处理程序,因此使用了默认的OnError处理程序。默认行为只是抛出错误并降低进程。

要重试,只需在调用Retry(3)之前应用Subscribe。要在第三次尝试之后吞下错误,请向OnError提供一个Subscribe处理程序,尽管我不一定推荐后者。仔细考虑应用程序是否真的能从这种场景中恢复过来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27956755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档