gpt4 book ai didi

c# - 如何忽略来自可观察序列的所有通知(错误除外)?

转载 作者:太空宇宙 更新时间:2023-11-03 19:04:58 24 4
gpt4 key购买 nike

我希望创建一个订阅输入源但仅保留错误消息的可观察对象(即忽略元素和完成消息,直到有人调用 Dispose)。

基本上我正在寻找类似 Observable.IgnoreElements 的东西但这更像是 Observable.Never .

问题是 IgnoreElements 会留下两个终止消息(成功和错误)。我只想留下错误通知并在序列成功终止时忽略。 Never 方法执行此操作,但仅生成一个可观察序列,您不能从另一个序列创建它。

最佳答案

如果您想要忽略除单个异常之外的所有更新,如果它发生,那么您可以这样做:

public static IObservable<T> OnlyError<T>(this IObservable<T> source)
{
return Observable.Create<T>(
observer => source.Subscribe(
value => { },
observer.OnError));
}

(其余答案不再相关,因为问题已更改。)

如果你想在单个序列中有多个异常,解决方案会稍微复杂一些。

IObserver<T> 的隐式合约是它将根据这种模式被调用:

OnNext* [OnError|OnCompleted]

OnError最多可以调用一次,它结束序列。请参阅以下摘录自 Observer Design Pattern Best Practices :

Once the provider calls the OnError or IObserver<T>.OnCompleted method, there should be no further notifications, . . .

如果你想要一个可以有多个“错误”的序列,定义如下:

interface ITry<T>
{
bool HasValue { get; }
T Value { get; }
Exception Error { get; }
}

然后像这样使用它:

IObservable<ITry<T>>

保留 IObserver<T>.OnError(Exception)这意味着 序列本身出了问题,而不是序列中的项目出了问题。

关于c# - 如何忽略来自可观察序列的所有通知(错误除外)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29615871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com