我知道 Observable.Never()
是创建永不完成的序列的一种方式,但是是否有一个扩展/清洁过程来创建可观察到的可观察到的可观察到单个值而从未完成?我会选择Observable.Create(...)
吗?Observable.Concat(Observable.Return(onlyValue), Observable.Never<T>())
?还是内置的或更多的" rxy"?
对于您的特定问题,一个简单的选择是使用‛every‛和‛startwith‛:
Observable.Never<int>().StartWith(5)
但对于"我有一个可观察到的序列,可以产生一些结果并最终完成,我想更改它,以使其无法完成"(您的问题是一种特殊情况)是这样做的方式
source.Concat(Observable.Never<int>());
或
Observable.Concat(source, Observable.Never<int>());
Observable.Concat(Observable.Return(onlyValue), Observable.Never<T>())
似乎是合理的。无论如何,我可能都在想这个。
这可以更简单地使用:
Observable.Return(whatever);
这是一种通用实用方法,可以一次进行。可以在没有源序列的情况下调用StartWith
的版本,从而消除了对Never
的需求。如果您经常使用构造,可能会使您的代码更可读。
public partial class ObservableEx
{
public static IObservable<TValue> StartWith<TValue>(TValue value)
{
return Observable.Create<TValue>(o =>
{
o.OnNext(value);
return Disposable.Empty;
});
}
}
为了完整性,这是创建版本:
Observable.Create<int>(subj => {
// Anyone who subscribes immediately gets a constant value
subj.OnNext(4);
// We don't have to clean anything up on Unsubscribe
// or dispose a source subscription
return Disposable.Empty;
});