我如何结束热观察?

How do I end a hot observable?

如果在特定时间范围内未收到值,我想基于事件结束可观察。

// This will go on forever because it is a hot
// observable based on an event
// If a value has not been produced in, say, 2 seconds
// I would like to stop it and raise an OnCompleted
var observable = Observable.FromEvent(...);

我可以像这样做 TakeUntil 但这将是从订阅开始的绝对时间段。我想要的是,如果在生成前一个值后的 2 秒内没有返回值,则停止并引发 OnCompleted 事件。

如果可观察对象在 2 秒内未生成任何值,则也停止并引发 OnCompleted 事件。

如果客户端代码不必维护关于最后一个值生成时间的状态,我将如何做到这一点?

试试这个:

var query = observable.Timeout(TimeSpan.FromSeconds(2.0), Observable.Empty<int>());

只需将 int 替换为您的源可观察对象的类型即可。