なぜ RX は次の文法を持っているのOnNext* (OnError|OnCompleted)
ですか? 代わりに(OnNext|OnError)* OnCompleted
?これは、実装の観点からは非常に明確です (これは および と共通のセマンティクスを持っていますIEnumerable
)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; }
}
}