为什么 RX 有以下语法OnNext* (OnError|OnCompleted)
?而不是(OnNext|OnError)* OnCompleted
?从实现的角度来看,这很清楚(这也与IEnumerable
and有共同的语义yield
),但我想这与现实生活中的情况不同。在现实生活中 - 生产者生成混合的数据流和异常(并且异常不会破坏生产者)。
问题:如果我理解正确,唯一可能的解决方案是使可观察的返回复杂数据结构结合初始数据和产生的异常(Observable.Timestamp()
并且.TimeInterval()
具有类似的概念)或者还有其他选择吗?
目前我找到了以下解决方案:在可观察生产者内部,我手动处理异常并将它们传递给以下数据结构,这是我可观察的结果
public class ValueOrException<T>
{
private readonly Exception ex;
private readonly T value;
public ValueOrException(T value, Exception ex)
{
this.value = value;
this.ex = ex;
}
public ValueOrException(T value)
{
this.value = value;
}
public T Value
{
get { return this.value; }
}
public Exception Ex
{
get { return this.ex; }
}
}