【发布时间】:2020-04-18 22:12:56
【问题描述】:
我有一个使用 Rx.NET 的控制台应用程序。
我需要阻塞直到 IConnectableObservable 完成,为此我使用IConnectableObservable.Wait()。
当一个未处理的异常被抛出时,它被吞下并且应用程序挂起。我希望应用程序崩溃,并将堆栈跟踪打印到控制台。
我不想将OnError 处理程序添加到我的IConnectableObserver,因为这会丢失原始堆栈跟踪。
我曾尝试在未发布的 observable 上使用 .Wait() 方法,但这会重新订阅会导致不良行为。
我尝试过使用.GetAwaiter().GetResult(),但这有同样的问题。
var connectable = myObservable.Publish();
connectable.Subscribe(myObserver1);
connectable.Subscribe(myObserver2);
connectable.Connect();
connectcable.Wait();
如何在保留典型的未处理异常行为的同时等待 IConnectableObservable 完成?
【问题讨论】:
-
我重现了这个问题。对我来说它看起来像一个错误。是否可以选择
Wait源可观察对象而不是可连接对象? -
很高兴知道这不仅仅是我。
Waiting 源 observable 是一个选项,但如上所述在源 observable 上调用.Wait()会再次订阅 observable,从而开始不同的结果序列。 -
是的,你是对的。奇怪的是,添加
onError处理程序如何改变可连接的等待者的行为! -
你试过
connectable.Subscribe(myObserver1);而不是connectable.Subscribe(Console.WriteLine, exn => Console.WriteLine("Handled"));吗?默认的OnError方法是 throw - 可以在 Appdomain 计时器之类的上下文中。 -
我实际上写了答案,但我会在发布之前让你确认。
Wait最终成为了一条红鲱鱼。 +1 混乱。
标签: c# exception .net-core system.reactive