在 Rx 中跟踪重复序列中的完成
Keeping track of the completions in a repeating sequence in Rx
能否请您告诉我是否有一种方法可以跟踪重复序列中当前重复的完成情况?我的最终目标是跟踪当前的计数和完成重复的速率,一旦我有了基础,我就可以做到这一点。感谢您的帮助。
sequence.Repeat().Publish().RefCount()
我想在上面的结构中捕获 "sequence" 的完成。
使用 Materialize
将 T
的可观察值转换为 Notification<T>
的可观察值。这允许您像处理普通序列值一样处理值、完成和错误。然后您可以过滤掉补全。但是,我不太明白你打算用它们做什么......
var completions = sequence
.Materialize()
.Where(notification => notification.Kind == NotificationKind.OnCompleted)
.Repeat();
Daniel 的回答是有效的,尽管它会隐藏流错误,但我不确定这是否是您想要的。
或者,您可以在重复之前简单地将您的流与单个元素流连接起来,并且该特殊元素将成为您的完成标记:
var completions = sequence
.Concat(Observable.Return(42))
.Repeat().Publish().RefCount();
如果你需要这个元素有一些上下文(你的问题没有说),将它与 Observable.Defer
:
结合起来
var completions = sequence
.Concat(Observable.Defer(() => Observable.Return(someExpression))
.Repeat().Publish().RefCount();
能否请您告诉我是否有一种方法可以跟踪重复序列中当前重复的完成情况?我的最终目标是跟踪当前的计数和完成重复的速率,一旦我有了基础,我就可以做到这一点。感谢您的帮助。
sequence.Repeat().Publish().RefCount()
我想在上面的结构中捕获 "sequence" 的完成。
使用 Materialize
将 T
的可观察值转换为 Notification<T>
的可观察值。这允许您像处理普通序列值一样处理值、完成和错误。然后您可以过滤掉补全。但是,我不太明白你打算用它们做什么......
var completions = sequence
.Materialize()
.Where(notification => notification.Kind == NotificationKind.OnCompleted)
.Repeat();
Daniel 的回答是有效的,尽管它会隐藏流错误,但我不确定这是否是您想要的。 或者,您可以在重复之前简单地将您的流与单个元素流连接起来,并且该特殊元素将成为您的完成标记:
var completions = sequence
.Concat(Observable.Return(42))
.Repeat().Publish().RefCount();
如果你需要这个元素有一些上下文(你的问题没有说),将它与 Observable.Defer
:
var completions = sequence
.Concat(Observable.Defer(() => Observable.Return(someExpression))
.Repeat().Publish().RefCount();