跟踪Rx中重复序列的完成情况

时间:2015-12-22 04:30:52

标签: c# system.reactive

如果有办法跟踪重复序列中当前重复的完成情况,请告诉我吗?我的最终目标是跟踪当前的计数和完成的重复率,一旦我有了基础,我就能做到。谢谢你的帮助。

sequence.Repeat().Publish().RefCount()

我想在上面的结构中捕获“序列”的完成。

2 个答案:

答案 0 :(得分:3)

使用MaterializeT的观察值转换为Notification<T>的观察值。这允许您像普通序列值一样处理值,完成和错误。然后,您可以过滤掉完成。但是,我不太明白你打算用它们做什么......

var completions = sequence
    .Materialize()
    .Where(notification => notification.Kind == NotificationKind.OnCompleted)
    .Repeat();

答案 1 :(得分:1)

丹尼尔的回答是有效的,虽然它会隐藏流错误,但我不确定这是你想要的。 或者,您可以在重复之前使用单元素流简单地连接流,并且该特殊元素将是您的完成标记:

var completions = sequence
    .Concat(Observable.Return(42))
    .Repeat().Publish().RefCount();

如果您需要此元素有一些上下文(您的问题没有说明),请将其与Observable.Defer组合:

var completions = sequence
    .Concat(Observable.Defer(() => Observable.Return(someExpression))
    .Repeat().Publish().RefCount();