如何创建一个可观察到的可产生单个价值且永不完整的可观察到的



我知道 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;
});

相关内容

  • 没有找到相关文章