注意:我指的是 .NET 4 版本的 RX。
我一直在使用RX的ReplaySubject类。我正在调用 OnError 并带有异常作为参数。
我期望它会通知所有 OnError 订阅者并将异常传递给他们,相反,它只是抛出异常,然后异常就无法处理。
代码很简单,你可以在 GitHub 上查看代码。https://github.com/arielbh/CodeCommander/blob/master/CodeValue.CodeCommander/CommandBase.cs第 117 行是 OnNext 呼叫。
有什么想法吗?显然,我希望我期望的行为发生。谢谢
爱丽儿
好的,我找到了原因。如果您未订阅 OnError,则默认行为将引发异常。我不够小心,所以没有观察到引发错误的主体。
更多信息:http://social.msdn.microsoft.com/Forums/en/rx/thread/3125094b-1ab2-4d01-8f44-fb68ef913f43
我也遇到了这种奇怪的行为。我创建了自己的扩展方法来获得我期望的行为。
public static void SendOnError<T, E>(this IObserver<T> Subject, E ExceptionToSend) where E : Exception
{
try { Subject?.OnError(ExceptionToSend); }
catch (E exception)
{
Debug.WriteLine("One or more subscribers to the subject did not implement an OnError handler. Ignoring rethrown exception: " + exception.Message);
}
}