如何在Timeout扩展中获取最新的序列元素?

时间:2015-09-25 10:58:44

标签: .net system.reactive rx.net

我想知道在Timeout触发之前获取序列中最新元素的最佳方法是什么?

我有一个代码可以不时ping远程服务,我希望能够识别一个已脱机的代码。

使用Timeout扩展我想到了:

heartbeatResponseObservable.Timeout(Timeout, Observable.Return(new HeartbeatBusMessage.Timeout()))

这种工作,但它不允许我找到哪些服务已经消失。 我想要的是Timeout扩展,其中流中的最新消息作为参数在其生成的错误消息中提供一些信息。

如何获取Timeout扩展中的最新序列元素?

1 个答案:

答案 0 :(得分:1)

// Create 10 events quickly, then once every two seconds.
var source =
    Observable.Interval(TimeSpan.FromMilliseconds(100))
        .Take(10)
        .Concat(Observable.Interval(TimeSpan.FromSeconds(2)));

// Set a timeout of 1 second.
var last = source.TimeOutExtension(TimeSpan.FromSeconds(1));

last.Subscribe(Console.WriteLine); // outputs 9

可以像这样使用:

correctClockSkew