0

我正在连接到一个将对象集合异步加载到 IEnumerable 中的对象。在我连接时,IEnumerable 的集合中可能已经有项目,并且可能会在应用程序的生命周期内添加需要在发生时通知我的项目。例如,它可以是包含银行交易列表的银行账户。

挑战是这样的。我想将 IEnumerable 中初始值的处理与任何新增内容结合起来。它们目前是两个过程。我想完全消除 NotifyCollectionChanged 的​​使用。

我可以修改持有 IEnumerable 的后端。如果存在此问题的解决方案,则不需要保留为 IEnumerable。

4

2 回答 2

2

我建议该对象不应该公开 IEnumerable ,因为那是“冷可观察值”,在您的情况下,您需要一些可以在将来获得其他项目的东西。

对此进行建模的最佳方法是使用ReplaySubject<T>而不是 IEnumerable。下面是一个例子,说明你的情况类似:

//Function to generate the subject with future values
public static ReplaySubject<int> GetSubject()
{
    var r = new ReplaySubject<int>();
    r.OnNext(1); r.OnNext(2); r.OnNext(3);
    //Task to generate future values
    Task.Factory.StartNew(() =>
    {
        while (true)
        {
            Thread.Sleep(3000);
            r.OnNext(DateTime.Now.Second);
        }
    });
    return r;
}

消费代码:

var sub = GetSubject();
sub.Subscribe(Console.WriteLine);

每次订阅sub都会得到该主题迄今为止发布的所有值,以及该主题未来产生的新值

于 2011-09-02T05:48:06.663 回答
0

您可以使用延迟/重播运算符

于 2011-10-30T15:25:17.460 回答